C++ STL分配器vs运算符new

Iva*_*Siu 24 c++ memory stl new-operator allocator

根据C++ Primer第4版,第755页,有一条说明:

现代C++程序通常应该使用allocator类来分配内存.它更安全,更灵活.

我不太明白这个说法.到目前为止,我读过的所有材料都教导用newC++分配内存.本书中展示了向量类如何利用分配器的示例.但是,我想不出其他情况.

任何人都可以帮忙澄清这个陈述吗?并举个更多例子?我应该何时使用分配器以及何时使用new?谢谢!

jwd*_*jwd 41

对于一般编程,是的,你应该使用newdelete.

但是,如果你正在写一个图书馆,你不应该!我没有你的教科书,但我想它正在编写库代码的上下文中讨论分配器.

库的用户可能想要精确控制从哪里分配的内容.如果所有库的分配都经过new并且delete用户将无法获得细粒度的控制级别.

所有STL容器都使用可选的allocator模板参数.然后容器将使用该分配器来满足其内部存储器需求.默认情况下,如果省略分配器,它将使用std::allocator哪个使用newdelete(特别是::operator new(size_t)::operator delete(void*)).

这样,该容器的用户可以根据需要控制分配内存的位置.

实现与STL一起使用的自定义分配器的示例,以及解释:使用STL的自定义池分配器提高性能

附注:分配器的STL方法在几个方面是非最优的.我建议阅读更好的分配器模型,以讨论其中的一些问题.

  • +1"分配器的STL方法是非最优的"加上"迈向更好的分配器模型"的链接:) (5认同)