Spec-Zone.ru › C++

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], но ни один из его элементов не конструируется.

1) Вызывает a.allocate(n).
2) Дополнительно передаёт подсказку местоположения памяти 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* хорошо определена в выделенном массиве, но поведение неопределено при доступе к элементам.

Пример

См. также

allocate
выделяет неинициализированное хранилище
(общедоступный член-функция 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

Spec-Zone.ru

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