C++ scoped_ptr内存泄漏查证

前几天遇到个问题,使用scoped_ptr管理的对象发生内存泄漏。

解决过程:

通过MAT工具发现java实例泄漏,标注Native stack,

于是跑到jni/C++去找,通过打log发现析构函数没有调用。

奇怪的是这个对象使用scoped_ptr管理,整个指针在代码里没有什么非法操作,应该可以自动销毁。

于是在实例release时强行析构(调用scoped_ptr reset() ),发现实例成功释放。

再次回到代码,查找循环引用和不规范的使用指针依然无果。。。。

最后发现是父类没有定义vitrual 的析构函数。

由此总结下C++中使用智能指针依然发生内存泄漏的debug思路

1、在代码中查找循环引用等不规范问题

2、查看父类的析构函数

未完待续

你可能感兴趣的:(C++ scoped_ptr内存泄漏查证)