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>
)
|