share_ptr引起内存泄漏

  |   0 评论   |   0 浏览

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