std::allocator_traits<Alloc>::allocate_at_least
[[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 и т. д. |
Пример
См. также
|
(C++23) |
выделяет неинициализированную память размером как минимум запрошенного размера (публичный член-функция std::allocator<T>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/allocator_traits/allocate_at_least