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();
		}

//省略...

你可能感兴趣的:(C/C++,weak_ptr)