本文主要是介绍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 ctorsif (_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类定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!