Spec-Zone.ru › C++

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

Пример

См. также

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

Spec-Zone.ru

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