似乎分配程序与“新放置”和“新运算符”所做的工作相同。而且它的界面更加方便。
例如:
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;
这是否意味着“新安置”和“新操作员”已过时?
它们仍然是必需的。您还将如何实现自定义分配器?;)
编辑:
这个答案值得更多的解释:
如果看一下std :: allocator的construct
成员函数,您会发现它使用了placement new运算符。
因此,分配器的职责是通过成员函数为对象分配足够大的未初始化存储allocate
,然后通过其construct
成员将其“就地”构造到该存储中。后者是使用new放置执行的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句