std::shared_ptr

1.std::shared_ptr 的实现是使用的引用计数,其基本结构为(非具体实现,大致结构)

 std::shared_ptr {
      std::shared_ptr_core * core;
}

也就是一个每个 std::shared_ptr 对象实际是指向一个 shared_core核心(非具体实现,大致结构)

std::shared_ptr_core{
   T* m_pData;
   std::atmoic m_refCount;
   std::atmoic m_refWeakCount;
}

2.当refCount为0时,m_pData会被delete掉,但这个时候还会有weak_ptr指向shared_ptr_core,如果这时候(当refCount==0时)析构掉core会导致其他的weak_ptr析构出现问题
3.weak_ptr的lock方法就是根据shared_ptr_core来构建一个shared_ptr实现
summary:
当m_refCount为0是只会析构到智能指针指向的对象,但是不会析构两个引用计数,当m_refCount和 m_refWeakCount都为0时,说明没任何对象在指向这个对象了,这时候就会析构shared_core

你可能感兴趣的:(std::shared_ptr)