share_ptr引起内存泄漏
1. shared_ptr引起内存泄漏的情况
当一个类持有另一个类的智能指针变量时,会遇到这种情况:两个对象同时都持有对方的一个智能指针,当其作用域结束时,两个shared_ptr的引用计数都没有变为0,这块内存的空间无法释放,引起内存泄漏。
示例代码如下:
#include <memory>
using namespace std;
class B;
class A{
public:
void set_shared(shared_ptr<B> sb){
myb = sb;
}
private:
shared_ptr<B> myb;
};
class B{
public:
void set_shared(shared_ptr<A> sa){
mya = sa;
}
private:
shared_ptr<A> mya;
};
int main(){
shared_ptr<A> sa = make_shared<A>();
shared_ptr<B> sb = make_shared<B>();
sa->set_shared(sb);
sb->set_shared(sa);
}
2. valgrind验证
3. 解决方法
- 避免写出类似的代码
- 使用weak_ptr弱引用