参考链接:https://blog.csdn.net/yc2zgh1314/article/details/51264963
https://www.cnblogs.com/duacai/p/13341422.html
先看有循环引用问题的代码:
结果(没有释放分配的堆内存):
程序模型图:
出现堆内存没有释放的原因是:
两个堆空间没有释放是因为指向它们的智能指针成员变量没有析构导致引用计数不为0,这个智能指针成员变量没有析构又是因为它们所属的堆对象没有析构,而这两个堆对象没有析构是因为它们被智能指针保管,该智能指针又被指向的堆对象的智能指针成员变量增加了引用计数。
解决的办法就是用weak_ptr取代智能指针成员变量,从而解决shared_ptr智能指针循环引用的问题。
代码:
Original: https://www.cnblogs.com/kongbursi-2292702937/p/15689971.html
Author: kongbursi
Title: C++解决share_ptr造成的循环引用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535480/
转载文章受原作者版权保护。转载请注明原作者出处!