C++ 11智能指针之week_ptr week_ptr是对对象的一种弱引用,它不会增加对象的引用计数。week_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> A_Share; 4 typedef shared_ptr<B> 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; 1 class B 2 { 3 public: 4 week_ptr<A> m_a; 5 } |
|