Пространства имён
Варианты
Действия

std::allocator_traits::allocate_at_least

Материал из cppreference.com
 
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
<tbody> </tbody>
[[nodiscard]] 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 и т.д.

Пример

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

выделяет неинициализированное хранилище как минимум такого же размера, как запрошенный размер
(public функция-элемент std::allocator) [править]