前几天遇到个问题,使用scoped_ptr管理的对象发生内存泄漏。
解决过程:
通过MAT工具发现java实例泄漏,标注Native stack,
于是跑到jni/C++去找,通过打log发现析构函数没有调用。
奇怪的是这个对象使用scoped_ptr管理,整个指针在代码里没有什么非法操作,应该可以自动销毁。
于是在实例release时强行析构(调用scoped_ptr reset() ),发现实例成功释放。
再次回到代码,查找循环引用和不规范的使用指针依然无果。。。。
最后发现是父类没有定义vitrual 的析构函数。
由此总结下C++中使用智能指针依然发生内存泄漏的debug思路
1、在代码中查找循环引用等不规范问题
2、查看父类的析构函数
未完待续