std::allocator_traits<Alloc>::allocate

来自cppreference.com
 
 
动态内存管理
智能指针
(C++11)
(C++11)
(C++11)
(C++17 前)
(C++11)
(C++23)
分配器
内存资源
未初始化存储
未初始化内存算法
受约束的未初始化内存算法
垃圾收集支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
杂项
(C++20)
(C++11)
(C++11)
C 库
低层内存管理
 
 
定义于头文件 <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) 。若不可能(例如无双参数成员函数 allocate() ),则调用 a.allocate(n)

参数

a - 使用的分配器
n - 要分配存储的对象数
hint - 指向临近内存位置的指针

返回值

调用 a.allocate(n) 所返回的指针。

注解

P0593R6 前不保证 Alloc::allocate 创建数组对象,这使得按照核心语言规范,对 std::vector 及某些其他容器使用非默认分配器并非实际良定义。

在调用 allocate 后、构造元素前, Alloc::value_type* 的指针算术在分配的数组内是良定义的,但若访问元素则行为未定义。

参阅

分配未初始化的存储
(std::allocator<T> 的公开成员函数)