std::allocator_traits<Alloc>::allocate
Определено в заголовке <memory> | ||
|---|---|---|
| (1) | ||
static pointer allocate( Alloc& a, size_type n ); |
(с C++11) (до C++20) | |
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n ); | (с C++20) | |
| (2) | ||
static pointer allocate( Alloc& a, size_type n,
const_void_pointer hint ); |
(с C++11) (до C++20) | |
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n,
const_void_pointer hint );
| (с C++20) |
Использует аллокатор a для выделения n * sizeof(Alloc::value_type) байтов неинициализированного хранилища. Создается массив типа Alloc::value_type[n], но ни один из его элементов не конструируется.
a.allocate(n).hint. Вызывает a.allocate(n, hint) если возможно. Если нет (например, у a нет члена-функции с двумя аргументами allocate), вызывает a.allocate(n).Параметры
| a | - | используемый аллокатор |
| n | - | количество объектов, для которых необходимо выделить хранилище |
| hint | - | указатель на близлежащее местоположение памяти |
Возвращаемое значение
Указатель, возвращённый вызовом a.allocate(n).
Примечания
Alloc::allocate не требовалось для создания объекта массива до P0593R6, что сделало использование не по умолчанию аллокатора для std::vector и некоторых других контейнеров неопределённым согласно строгому прочтению спецификации языка.
После вызова allocate и до построения элементов, арифметика указателей Alloc::value_type* хорошо определена в выделенном массиве, но поведение неопределено при доступе к элементам.
Пример
См. также
| выделяет неинициализированное хранилище (общедоступный член-функция 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