C ++分配器:运算符new或place new

时间:2019-12-04 09:03:34

标签: c++ new-operator allocator placement-new

阅读此link之后,我知道placement new太难使用了。然后我发现std::allocator,所以我认为std::allocator应该使用placement new,因为它可以分开分配并分两步进行构造。

但是,似乎How are allocator in C++ implemented?告诉我std::allocator是由operator new而不是placement new实现的。我现在很困惑。如果它不使用placement new,它将如何分隔分配并分两步进行构建?

1 个答案:

答案 0 :(得分:3)

您必须在the operator new functionnew expressions之间有所区别。

前者(operator new函数)仅分配内存。后者(new表达式)调用 operator new分配内存,然后调用构造函数。


std::allocator具有实现分配和构造的两个功能:allocateconstruct

allocate函数使用operator new函数分配内存。 construct函数使用newplacement构造对象。这似乎是您想要的两步过程。