weak_ptr “弱“的智能指针

本文详细介绍了智能指针中的weak_ptr,它不控制对象的生存期,常用于解决shared_ptr可能导致的循环引用问题。当最后一个shared_ptr销毁后,即使有weak_ptr存在,对象也会被释放。weak_ptr提供了use_count()和expired()方法来检查对象状态,lock()方法用于获取可安全使用的shared_ptr。示例展示了如何创建和使用weak_ptr。
摘要由CSDN通过智能技术生成

weak-ptr

weak_ptr 是一种不控制所指向对象生存期的智能指针,它指向由一个shared_ptr管理的对象。

将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。即使有weak_ptr指向对象,对象还是会被释放。

weak_ptr操作功能
weak_ptr w空weak_ptr可以指向类型为T的对象
weak_ptr w(sp)与shared_ptr sp指向相同对象的weak_ptr。T必须能转换为sp指向的类型
w = pp可以是一个shared_ptr或一个weak_ptr。赋值后w和p共享对象
w.reset()将w置为空
w.use_count()与w共享对象的shared_ptr的数量
w.expired()如果w.use_count()为0,返回true,或者返回false
w.lock()如果expired为true,将返回一个空shared_ptr;否则返回一个指向w的对象的shared_ptr

当创建一个weak_ptr时,要用一个shared_ptr来初始化它:

auto p = make_shared_ptr<int>(432);
weak_ptr<int> wp(p);//wp弱共享p,p的引用计数没有改变

由于对象可能不存在,我们不能使用weak_ptr直接访问对象,而必须使用lock。

通过这个函数检查weak-ptr指向的对象是否存在。


if(shared_ptr<int> np = wp.lock()){//如果np为空,那么条件不成立
	//在if中,np和p共享对象
	//p是上面的shared-ptr
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值