C++|谈谈这个weak_ptr

本文详细介绍了C++中的weak_ptr,它是shared_ptr的辅助类型,用于解决智能指针间的循环引用问题。weak_ptr不增加引用计数,通过expired()检查资源是否已释放,并通过lock()获取有效的shared_ptr。文章通过一个实例展示了weak_ptr如何防止内存泄漏,解释了使用weak_ptr解决shared_ptr成环问题的重要性。
摘要由CSDN通过智能技术生成

谈谈这个weak_ptr

参加面试的时候面试官让我讲讲对C++智能指针的认识。其中我对shared_ptr跟unique_ptr两个还好,因为使用比较熟悉,原理跟实现上都还可以,但是对weak_ptr没具体使用过,只记得它的概念,所以回答得不好。所以就整理一下这个weak_pt的使用。

有一句话说的很好,“weak_ptr就像观测者那样观测资源的使用情况”。
首先,weak_ptr是配合shared_ptr的使用,weak_ptr可以用shared_ptr来赋值,但当它引用shared_ptr时并不会引起它的计数,
另外,weak_ptr并没有重载解引用等操作符,也不单独使用(不能单独使用的原因是,weak_ptr没有重载解引用*、->运算符,也就是说它只能访问但不能修改)。
使用expired()检查weak_ptr的引用情况(expired()==true时表示资源已被释放),使用lock()获取一个shared_ptr的对象。

weak_ptr的经典应用场景:shared_ptr的成环问题。

class A;
class B {
private:
	shared_ptr<A> ptr2A;
public:
	B() {
		cout << "B constructing." << endl;
	}
	~B() {
		cout << "B destroying." << endl;
	}
	void set_ptr(shared_ptr<A>& p) {
		ptr2A = p;
	}
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值