跳到主要内容

std::allocator<T>::construct

C++11 起,C++17 中弃用,C++20 中移除
template< class U, class... Args >
void construct( U* p, Args&&... args );
直到 C++11
void construct( pointer p, const_reference val );

在由p指向的已分配的未初始化存储中,使用全局定位 new 来构造一个类型为T的对象。

  1. 调用::new((void*)p) T(val)
  2. 调用::new((void*)p) U(std::forward<Args>(args)...)

参数

p - 指向已分配的未初始化存储的指针
val - 用作复制构造函数参数的值
args... - 要使用的构造函数参数

返回值

(无)

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 402C++98如果 T::operator new 存在,程序可能格式错误使用全局替换 new

std::allocator<T>::construct

C++11 起,C++17 中弃用,C++20 中移除
template< class U, class... Args >
void construct( U* p, Args&&... args );
直到 C++11
void construct( pointer p, const_reference val );

在由p指向的已分配的未初始化存储中,使用全局定位 new 来构造一个类型为T的对象。

  1. 调用::new((void*)p) T(val)
  2. 调用::new((void*)p) U(std::forward<Args>(args)...)

参数

p - 指向已分配的未初始化存储的指针
val - 用作复制构造函数参数的值
args... - 要使用的构造函数参数

返回值

(无)

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 402C++98如果 T::operator new 存在,程序可能格式错误使用全局替换 new