阅读此link之后,我知道placement new
太难使用了。然后我发现std::allocator
,所以我认为std::allocator
应该使用placement new
,因为它可以分开分配并分两步进行构造。
但是,似乎How are allocator in C++ implemented?告诉我std::allocator
是由operator new
而不是placement new
实现的。我现在很困惑。如果它不使用placement new
,它将如何分隔分配并分两步进行构建?
答案 0 :(得分:3)
您必须在the operator new
function和new
expressions之间有所区别。
前者(operator new
函数)仅分配内存。后者(new
表达式)调用 operator new
分配内存,然后调用构造函数。
std::allocator
具有实现分配和构造的两个功能:allocate
和construct
。
allocate
函数使用operator new
函数分配内存。 construct
函数使用newplacement构造对象。这似乎是您想要的两步过程。