Namespaces
Variants

std::allocator_traits<Alloc>:: allocate_at_least

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
static constexpr std:: allocation_result < pointer, size_type >
allocate_at_least ( Alloc & a, size_type n ) ;
(начиная с C++23)

allocate_at_least вызывает a. allocate_at_least ( n ) и возвращает его результат, если вызов корректен, в противном случае эквивалентно return { a. allocate ( n ) , n } ; .

allocator_at_least пытается выделить память как минимум для n value_type объектов и предоставляет механизм отката, который выделяет память ровно для n объектов.

Содержание

Параметры

a - аллокатор, используемый для выделения памяти
n - нижняя граница количества объектов, для которых выделяется память

Возвращаемое значение

a. allocate_at_least ( n ) если это корректное выражение.

В противном случае, std:: allocation_result < pointer, size_type > { a. allocate ( n ) , n } .

Исключения

Выбрасывает что и когда выбрасывает выбранная функция распределения.

Примечания

Функция-член allocate_at_least типов Allocator в основном предоставляется для контейнеров с непрерывным хранением, таких как std::vector и std::basic_string , чтобы уменьшить перераспределение памяти за счёт соответствия их ёмкости фактически выделенному размеру, когда это возможно. Поскольку allocate_at_least предоставляет механизм резервирования, она может быть напрямую использована в соответствующих случаях.

Для объекта аллокатора a типа Alloc , пусть result обозначает значение, возвращаемое из std:: allocator_traits < Alloc > :: allocate_at_least ( a, n ) , память должна быть освобождена с помощью a. deallocate ( result. ptr , m ) (обычно вызывается через std:: allocator_traits < Alloc > :: deallocate ( a, result. ptr , m ) ) во избежание утечки памяти.

Аргумент m , используемый при освобождении памяти, должен быть не меньше n и не больше result. count , в противном случае поведение не определено. Заметьте, что n всегда равно result. count , если аллокатор не предоставляет allocate_at_least , что означает, что m должен быть равен n .

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least и др.

Пример

Смотрите также

выделяет неинициализированную память размером не менее запрошенного
(публичная функция-член std::allocator<T> )