std::allocator_traits<Alloc>::allocate
< cpp | memory | allocator traits
定义于头文件 <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> 的公开成员函数) |