结构分析
weak_ptr和shared_ptr都包含一个_M_refcount数据成员,追溯其定义,内部包含一个_Sp_counted_base<_LP>* _M_pi。
shared_ptr
shared_ptr能够实现其功能依赖于对于多个shared_ptr只实例化一个_Sp_counted_base<_Lp>。当我们通过某一shared_ptr初始化另一shared_ptr时,其会执行如下两个步骤
1、this->_M_ptr = other->_M_ptr
2、this->_M_refcount._M_pi指向了other->_M_refcount._M_pi,并且将_M_use_count++,表示对一个实体的引用增加1个。
当shared_ptr析构时,执行如下步骤
1、this->_M_refcount._M_pi->_M_use_count 减1
2、如果this->_M_refcount._M_pi->_M_use_count归零,则析构this->_M_ptr所执行的内存空间。
3、如果this->_M_refcount._M_pi->_M_weak_count归零,则析构this->_M_refcount._M_pi的空间
weak_ptr
weak_ptr必须依靠shared_ptr才能进行构造,其构造过程如下:
1、weak->_M_ptr =