Spec-Zone.ru › C++

std::allocator<T>::allocate_at_least

[[nodiscard]] constexpr std::allocation_result<T*, std::size_t>
    allocate_at_least( std::size_t n );
(с C++23)

Выделяет count * sizeof(T) байт неинициализированного хранилища, где count — неопределённое целое значение, не меньшее n, вызывая ::operator new (может быть передан дополнительный аргумент std::align_val_t), но не определено, когда и как эта функция вызывается.

Затем эта функция создаёт массив типа T[count] в хранилище и начинает его жизненный цикл, но не начинает жизненный цикл ни одного из его элементов.

Для использования этой функции в константном выражении выделенное хранилище должно быть освобождено в рамках оценки этого же выражения.

Использование этой функции некорректно, если T является неполным типом.

Параметры

n - нижняя граница числа объектов, для которых необходимо выделить хранилище

Возвращаемое значение

std::allocation_result<T*>{p, count}, где p указывает на первый элемент массива из count объектов типа T, элементы которых ещё не были созданы.

Исключения

Бросает std::bad_array_new_length если std::numeric_limits<std::size_t>::max() / sizeof(T) < n, или std::bad_alloc если выделение памяти завершается неудачей.

Примечания

allocate_at_least в основном предоставляется для контейнеров с непрерывным хранилищем, например, std::vector и std::basic_string, для уменьшения перераспределения, делая их ёмкость соответствующей фактическому выделенному размеру, когда это возможно.

Формулировка «неопределено, когда и как» позволяет объединять или оптимизировать выделения памяти кучи, выполняемые контейнерами стандартной библиотеки, даже если такие оптимизации запрещены для прямых вызовов ::operator new. Например, это реализовано в libc++ ([1] и [2]).

После вызова allocate_at_least и перед созданием элементов арифметика указателей T* определена внутри выделенного массива, но поведение не определено, если к элементам обращаются.

Макрос проверки функции Значение Стандарт Функция
__cpp_lib_allocate_at_least 202302L (C++23) allocate_at_least и т.д.

Пример

См. также

allocation_result
(C++23)
записывает адрес и фактический размер памяти, выделенной allocate_at_least
(шаблон класса)
allocate_at_least
[статический] (C++23)
выделяет хранилище не меньше, чем указанный размер через аллокатор
(публичный статический член-функция std::allocator_traits<Alloc>)

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

Spec-Zone.ru

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