使用STL编写内存泄漏安全代码应该避免什么?

Van*_*ril 5 c++ memory-leaks stl

我已经使用STL很长一段时间了,但主要是为了它而实现算法,而不是其他代码中的偶然向量.

在我开始使用它之前,我想知道人们在使用STL时常犯的错误 - 特别是,在使用STL模板保护我的代码免受内存泄漏时,我应该注意哪些事项?

grz*_*zkv 13

有效使用STL存在很多瓶颈,如果你想了解更多,我建议使用S.Meyers的"Effective STL"这本书.


Unc*_*ens 9

将原始指针存储到容器中的动态分配对象时,容器将无法管理其内存.

vector<FooBar*> vec;
vec.push_back(new FooBar); //your responsibility to free them
Run Code Online (Sandbox Code Playgroud)

为了使其更具内存泄漏能力,请使用智能指针容器或专用指针容器,如Boost:指针容器

特别是考虑到如果抛出异常,执行可能无法达到手动清理代码(除非做出痛苦的努力).

  • 这当然是正确的,但与STL无关:如果不删除堆分配的对象,则总会泄漏内存.如果你的代码以前没有任何内存泄漏,我认为你不能仅仅通过使用STL来引入内存泄漏.我认为更重要的问题是悬空引用或迭代器之类的东西. (6认同)

Mer*_*ham 6

特别是,在使用STL模板来保护我的代码免受内存泄漏的影响时,我应该注意什么?

STL与否,答案是一样的: