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 и т. д. |
Пример
См. также
|
(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