首页 > 编程语言 > 详细

C++的weak_ptr

时间:2021-03-16 22:14:30      阅读:30      评论:0      收藏:0      [点我收藏+]

在以前的文章中,我们讲过C++的shared_ptr,利用它可以实现基于引用计数的指针回收,从而防止出现内存泄露。
但是事实上,即使是采用了shared_ptr,在存在循环引用的情况下其实仍然会导致内存泄露,举个例子:

struct B;

struct A
{
    std::shared_ptr<B> p;
};

struct B
{
    std::shared_ptr<A> p;
};

int main()
{
    {
        auto a = std::make_shared<A>();
        auto b = std::make_shared<B>();
        a->p = b;
        b->p = a;
    }
    return 0;
}

A和B之间相互引用,在大括号中,它们的引用计数为2;即使是被销毁后,引用计数也只是变成了1,不会销毁,这样就出现了内存泄漏。
to be continued

C++的weak_ptr

原文:https://www.cnblogs.com/wickedpriest/p/14546026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!