c++新特性11 (12)weak_ptr
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++新特性11 (12)weak_ptr相关的知识,希望对你有一定的参考价值。
1. 类定义
// CLASS TEMPLATE weak_ptr
template <class _Ty>
class weak_ptr : public _Ptr_base<_Ty> // class for pointer to reference counted resource
public:
constexpr weak_ptr() noexcept
weak_ptr(const weak_ptr& _Other) noexcept
this->_Weakly_construct_from(_Other); // same type, no conversion
template <class _Ty2, enable_if_t<_SP_pointer_compatible<_Ty2, _Ty>::value, int> = 0>
weak_ptr(const shared_ptr<_Ty2>& _Other) noexcept
this->_Weakly_construct_from(_Other); // shared_ptr keeps resource alive during conversion
…
1.1 _Weakly_construct_from
自身的计数器要加1,基类 的weak计算器加1。
template <class _Ty2>
void _Weakly_construct_from(const _Ptr_base<_Ty2>& _Other) noexcept
// implement weak_ptr's ctors
if (_Other._Rep)
_Ptr = _Other._Ptr;
_Rep = _Other._Rep;
_Rep->_Incwref();
else
_STL_INTERNAL_CHECK(!_Ptr && !_Rep);
注,基类的两个计数器:
_Atomic_counter_t _Uses = 1;
_Atomic_counter_t _Weaks = 1;
以上是关于c++新特性11 (12)weak_ptr的主要内容,如果未能解决你的问题,请参考以下文章
C++11新特性:25~27—— C++11 shared_ptr/unique_ptr/weak_ptr 智能指针
C++ 智能指针(shared_ptr/weak_ptr)源码分析