c++智能指针(五)之weak_ptr
来源:互联网 发布:c语言char转int 编辑:程序博客网 时间:2024/06/01 18:55
weak_ptr
weak_ptr是一种不控制所指向对象的生存期的智能指针,它指向由一个shared_ptr所管理的对象。将一个weak_ptr绑定到shared_ptr上面不会改变shared_ptr的引用计数。
一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。
创建
auto p = make_shared<int>(42);weak_ptr<int>q(p);//q弱共享p,p的引用计数不会改变
访问
由于对象可能不存在,我们不能使用weak_ptr直接访问对象,而必须调用lock。
if (shared_ptr<int> np = q.lock()){//如果np不为空则条件成立 //在if中,np与p共享对象 }
weak_ptr与循环引用
struct A{ std::shared_ptr<A> ptr;};void main(){ std::shared_ptr<A> x=std::make_shared<A>(); std::shared_ptr<A> y=std::make_shared<A>(); x->ptr = y; // 这还不算是循环引用 y->ptr = x; // 现在算是循环引用了, x使y保持存活y使x保持存活。他们两个的计数至少为1,永远不会变成0。}
这个时候,只需要把其中一个shared_ptr改成weak_ptr就可以解决这个问题了。
阅读全文