循环引用示例
#include "stdafx.h" using namespace std; class CCycleRef public: void CycleRefTest() cout<<"reference count:"<<cyclRef.use_count()<<endl; int _tmain(int argc, _TCHAR* argv[]) |
运行结果:
运行结果:
reference count:2
创建的CCycleRef对象没有释放掉。
原因是CCycleRef类进行了自引用,引用计数增加所致,类图如下。
循环引用解决
引入weak_ptr弱引用指针即可解决循环引用问题。weak_ptr不会修改引用计数。
修改CCycleRef类。
class CCycleRef public: |
运行结果
reference count:1
destroying CCycleRef
创建的CCycleRef对象已被释放。