YaoCheng8667 的个人博客 YaoCheng8667 的个人博客

记录精彩的程序人生

目录
share_ptr引起内存泄漏
/  

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 验证

image.png

3. 解决方法

  • 避免写出类似的代码
  • 使用 weak_ptr 弱引用

标题:share_ptr引起内存泄漏
作者:YaoCheng8667
地址:https://ycisme.xyz/articles/2020/08/19/1597768400807.html