根据C++ Primer第4版,第755页,有一条注释说:
现代 C++ 程序通常应该使用分配器类
来分配内存。它更安全、更灵活。
我不太明白这个说法。
到目前为止,我读过的所有材料都教授使用new
在C++中分配内存。
书中展示了向量类如何使用分配器的示例。
但是,我无法想到其他场景。
谁能帮忙澄清一下这个说法?并给我更多的例子?
我什么时候应该使用分配器以及什么时候使用new
?谢谢!
对于一般编程,是的,你应该使用new
and delete
.
但是,如果您正在编写一个库,则不应该!
我没有你的教科书,但我想它是在编写库代码的背景下讨论分配器。
图书馆的用户可能希望准确控制从哪里分配什么。如果图书馆的所有分配都已完成new
and delete
,用户将无法进行细粒度的控制。
所有 STL 容器都采用可选的分配器模板参数。然后容器将使用该分配器来满足其内部内存需求。默认情况下,如果省略分配器,它将使用std::allocator http://en.cppreference.com/w/cpp/memory/allocator它使用new
and delete
(具体来说,::operator new(size_t)
and ::operator delete(void*)
).
这样,该容器的用户可以根据需要控制内存的分配位置。
实现与 STL 一起使用的自定义分配器的示例和说明:使用 STL 的自定义池分配器提高性能 http://drdobbs.com/cpp/184406243
边注:STL 分配器方法在很多方面都不是最佳的。我推荐阅读迈向更好的分配器模型 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1850.pdf对其中一些问题进行讨论。
2019年编辑:自从写完这个答案以来,C++ 中的情况已经有所改善。有状态分配器是支持的 https://www.boost.org/doc/libs/1_68_0/doc/html/container/cpp_conformance.html#container.cpp_conformance.alloc_traits_move_traits在 C++11 中,该支持在 C++17 中得到了改进。一些参与“迈向更好的分配器模型”的人也参与了这些变革(例如:N2387 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2387.pdf),这样很好(:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)