设为首页 加入收藏

TOP

C++智能指针--weak_ptr
2015-07-24 05:41:44 来源: 作者: 【 】 浏览:6
Tags:智能 指针 --weak_ptr
weak_ptr是对对象的一种弱引用,它不会增加对象的引用计数。weak_ptr和shared_ptr之间可以相互转换,shared_ptr可以直接赋值给week_ptr,week_ptr可通过调用lock函数来获得shared_ptr(如果对象已经被释放,则返回一个空的shared_ptr)。 单纯使用shared_ptr有时会产生问题,考虑下面的代码: 复制代码
 1 class A;
 2 class B;
 3 typedef shared_ptr A_Share;
 4 typedef shared_ptr B_Share; 5 class A 6 { 7 public: 8 B_Share m_b; 9 }; 10 11 class B 12 { 13 public: 14 A_Share m_a; 15 }; 16 17 A_Share a(new A()); 18 B_Share b(new B()); 19 a.m_b = b; 20 b.m_a = a;
复制代码 在上面的代码中,a和b相互进行引用。在a和b离开作用域时,a和b的引用计数都是1,内存没有正常释放。解决方法是将A和B中的任意一个类声明的变量改为week_ptr类型的。比如,修改类B后的代码如下:
1 class B
2 {
3 public:
4        weak_ptr  m_a;
5 }
修改后,b.m_a = a不会增加A对象的引用计数,因此a离开作用域时,引用计数为0。B对象的引用计数为2,在a和b离开作用域时,引用计数各减1后也为0。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于Windows Socket的安全通信(C+.. 下一篇POJ 1386 Play on Words

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: