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 (12)weak_ptr

C++11新特性:25~27—— C++11 shared_ptr/unique_ptr/weak_ptr 智能指针

C++ 智能指针(shared_ptr/weak_ptr)源码分析

C++ 智能指针(shared_ptr/weak_ptr)源码分析

C++11 weak_ptr智能指针(一看即懂)

C++编程经验(12):C++11新特性