[zz] C++智能指针循环引用解决
轉載自:http://blog.csdn.net/segen_jaa/article/details/8080167
參考文章:http://www.cnblogs.com/TianFang/archive/2008/09/20/1294590.html。
前言:C++中智能指針的引入,使得開發人員在與內存的斗爭中占據上峰。然而凡事都不會盡善盡美,智能指針的循環引用缺陷還是會引發令人談虎色變的內存泄露。本文的內容就是講述,如何解決循環引用帶來的內存問題。
背景:智能指針采用Boost庫,語言C++,開發工具VS2005,示例程序為Win32程序。
關于Boost庫的使用,可見另一篇文章http://blog.csdn.net/segen_jaa/article/details/7407404。
循環引用示例
?
[cpp]?view plaincopy
運行結果:
?
reference count:2
創建的CCycleRef對象沒有釋放掉。
原因是CCycleRef類進行了自引用,引用計數增加所致,類圖如下。
?
循環引用解決
引入weak_ptr弱引用指針即可解決循環引用問題。weak_ptr不會修改引用計數。
修改CCycleRef類。
?
[cpp]?view plaincopy
運行結果
reference count:1
destroying?CCycleRef
創建的CCycleRef對象已被釋放。
轉載于:https://www.cnblogs.com/zhangzhang/archive/2013/03/04/2942637.html
總結
以上是生活随笔為你收集整理的[zz] C++智能指针循环引用解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对信号集操作函数的使用方法和顺序
- 下一篇: C++ stl 通用算法和成员函数使用