zoukankan      html  css  js  c++  java
  • 智能指针的循环引用问题

    转自:https://blog.csdn.net/weixin_43796685/article/details/104297360,讲的太明白了

    1.图解

     每一个smart_ptr都有两个数据成员,都是指针类型,一个是指向数据,另一个是引用计数。

    上图举的例子是针对双向链表,每个节点Node都有一个next同样是smart_ptr去指向下一个节点,这样会导致下一个结点的引用计数变为1,导致最后无法析构节点,从而无法释放动态内存,导致内存泄漏。

    解决的办法使用weak_ptr指向:

     这样在指向next节点的时候,next的引用技术不会发生改变。

    2.解决办法

    1. 当只剩下最后一个引用的时候需要手动打破循环引用释放对象。
    2. 当A的生存期超过B的生存期的时候,B改为使用一个普通指针指向A。
    3. 使用弱引用的智能指针打破这种循环引用。

    //1不太懂,不是引用都是2吗?怎么只剩下1个引用了?

    //2的话,还需要判断具体情况,哪个对象生命周期短??

  • 相关阅读:
    poj 3159 Candies
    强连通分量——Tarjan算法
    nyoj 次方求模
    nyoj 快速查找素数
    nyoj 光棍节的快乐
    拓扑排序
    快速幂取模
    nyoj 最大素因子
    素数打表
    nyoj 数的长度
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14494474.html
Copyright © 2011-2022 走看看