std::allocator_traits::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) |
выделяет неинициализированное хранилище как минимум такого же размера, как запрошенный размер (public функция-элемент std::allocator)
|