gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:39:58 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com