9

似乎分配器与“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;

那么这是否意味着“放置新”和“新操作员”已过时?

4

1 回答 1

5

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

编辑:

这个答案值得更多解释:

如果您查看 std::allocator 的construct成员函数,您会发现它使用了placement new 运算符。

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

于 2013-07-26T18:28:02.270 回答