Spec-Zone.ru › C++

std::allocator_traits<Alloc>::allocate_at_least

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 и т. д.

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/allocator_traits/allocate_at_least

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API