c++ - 我们还需要 "placement new"和 "operator new"吗?

标签 c++

allocator 似乎与“placement new”和“operator new”做了同样的工作。 界面更方便。

例如:

string *ps = static_cast<string *>(operator new(sizeof(string)));
new (ps) string("Hello");
cout<<*ps<<endl;

可以重写为

allocator<string> as;
string *ps2 = as.allocate(1);
as.construct(ps2,"Hello");
cout<<*ps2<<endl;

那么这意味着“placement new”和“operator new”已经过时了吗?

最佳答案

他们仍然需要。您将如何实现您的自定义分配器? ;)

编辑:

这个答案值得更多解释:

如果您看一下 std::allocator 的 construct 成员函数,您会发现它使用了放置新运算符。

因此,分配器的职责是通过成员函数 allocate 为对象分配足够大的未初始化存储,然后通过其 构造将其“就地”构造到该存储中 成员。后者是使用 placement new 执行的。

关于c++ - 我们还需要 "placement new"和 "operator new"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888387/

相关文章:

c++ - 了解动态链接在 UNIX 上的工作原理

c++ - 在 Windows DLL 中通过它的签名查找函数

c++ - 如何对多种类型进行一种显式特化?

c++ - 分配但不使用分配器的标准库设施

c++ - 使用未初始化的指针作为函数参数

c++ - 这被认为是有效的 c++11 或 c++14 吗?还是 gcc/clang 弄错了?

c++ - 直线x和y n-截点/C++

c++ - 无限循环的 "for(;;)"习语是否正确归因于 PDP-11 C 编译器?

c++ - C2057 : expected constant expression

c++ - & 打印出字符串的其余部分而不是地址