std::allocator_traits<Alloc>::allocate
Объявлено в заголовочном файле <memory> | ||
|---|---|---|
static pointer allocate( Alloc& a, size_type n ); | (1) |
(начиная с C++11) (constexpr начиная с C++20) |
static pointer allocate( Alloc& a, size_type n, const_void_pointer hint ); | (2) |
(начиная с C++11) (constexpr начиная с 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).
Примечания
До принятия P0593R6 от Alloc::allocate не требовалось создавать объект массива. Согласно строгому прочтению спецификации основного языка, это делало использование нестандартного аллокатора для 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/cpp/memory/allocator_traits/allocate