std::allocator_traits<Alloc>::allocate
自 C++20 起
// 1)
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n );
// 2)
[[nodiscard]] static constexpr pointer allocate( Alloc& a, size_type n,
const_void_pointer hint );
从 C++11 起,直到 C++20
// 1)
static pointer allocate( Alloc& a, size_type n );
// 2)
static pointer allocate( Alloc& a, size_type n,
const_void_pointer hint );
使用分配器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*
的指针算术是定义良好的,但如果访问元素,行为是未定义的。