c++ - 查找由智能指针引起的内存泄漏

标签 c++ pointers memory-leaks smart-pointers

有人知道发现智能指针引起的内存泄漏的“技术”吗?我目前正在开发一个用 C++ 编写的大型项目,该项目大量使用智能指针和引用计数。显然,我们有一些由智能指针引起的内存泄漏,它们仍然在代码中的某处被引用,因此它们的内存不会被释放。很难找到带有“不必要”引用的代码行,这会导致相应的对象不被释放(尽管它不再使用)。

我在网上找到了一些建议,建议收集引用计数器的递增/递减操作的调用堆栈。这给了我一个很好的提示,哪段代码导致引用计数器增加或减少。

但我需要某种算法,将相应的“增加/减少调用堆栈”组合在一起。删除这对调用堆栈后,我希望(至少)剩下一个“增加调用堆栈”,它向我展示了带有“不必要”引用的代码段,导致相应的对象未被释放。现在修复泄漏问题不大!

但是有人对进行分组的“算法”有想法吗?

Windows XP下进行开发。

(我希望有人理解,我试图解释的......)

编辑:我说的是循环引用引起的泄漏。

最佳答案

请注意,具有引用计数智能指针的泄漏源之一是具有循环依赖项的指针。例如,A 有一个指向 B 的智能指针,B 有一个指向 A 的智能指针。A 和 B 都不会被销毁。你必须找到,然后打破依赖关系。

如果可能,使用 boost 智能指针,并将 shared_ptr 用于应该是数据所有者的指针,而使用weak_ptr 用于不应该调用 delete 的指针。

关于c++ - 查找由智能指针引起的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67174/

相关文章:

c++ - 使用 firebreath 为 chrome 创建的 npapi 我可以从扩展程序而不是从 html 加载页面调用插件方法吗

C++ 错误 "undefined reference to GPScoord::(double,double) etc."

c++ - 有关初学者的数组和指针的问题

c++ - 将数组参数传递给主函数索引始于1 c++

swift - 如何取消初始化 CollectionView 类

c++ - 无法理解以下 C++ 代码行

c++ - Qt 中屏幕绘制和键盘按键事件的精确延迟

objective-c - 将 NSURL ** 转换为 CFURLRef *

swift - 由于引用循环导致 swift 内存泄漏

c++ - 内存/速度问题的一般策略