std::weak_ptr的笔记

笔记

  • weak_ptr构造函数需要传入一个shared_ptr指针。weak_ptr会保存shared_ptr指向的内存指针,但不能直接取出此指针,要通过weak_ptr::lock()获取到对应的shared_ptr对象。

  • weak_ptr不会增加shared_ptr的引用计数,weak_ptr引用计数指针指向的是shared_ptr的引用计数内存。智能指针引用计数内存有俩个计数:_Uses、_Weaks。weak_ptr会增加_Weaks的值。当_Uses及_Weaks均为0时,引用计数内存才会被释放,可参见后文代码。

  • 基于以上事实可知,可通过weak_ptr::expired()函数判断其跟踪的shared_ptr是否已被释放。

引用计数类

	// CLASS _Ref_count_base
class _Ref_count_base
	{	// common code for reference counting
private:
	virtual void _Destroy() = 0;
	virtual void _Delete_this() = 0;

private:
	_Atomic_counter_t _Uses;
	_Atomic_counter_t _Weaks;

//省略...


	void _Decref()
		{	// decrement use count
		if (_MT_DECR(_Mtx, _Uses) == 0)
			{	// destroy managed resource, decrement weak reference count
			_Destroy();
			_Decwref();
			}
		}

	void _Decwref()
		{	// decrement weak reference count
		if (_MT_DECR(_Mtx, _Weaks) == 0)
			_Delete_this();
		}

//省略...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值