智能指针的循环引用问题

转自: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的话,还需要判断具体情况,哪个对象生命周期短??

原文地址:https://www.cnblogs.com/BlueBlueSea/p/14494474.html