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/