如何为我自己的 shared_ptr 实现自己实现别名构造函数?

How to implement the aliasing constructor by own for my own shared_ptr implementation?

我正在尝试自己实现共享 ptr 模板 class。

shared_ptr 的别名构造函数的原型是

template< class Y >
shared_ptr( const shared_ptr<Y>& r, element_type *ptr );

我已经实现了转换构造函数如下,

shared_ptr<T>::shared_ptr(const shared_ptr<U> &p_ownershipObj,T* p_managedObjPtr)
      { 
         if(p_ownershipObj.m_refCountPtr) // Ql
         {
            m_managedObjectPtr=p_managedObjPtr;
            m_refCountPtr = p_ownershipObj.m_refCountPtr;
            m_refCountPtr->m_strongReferenceCount++;            
         }
      }

Q1。如何在这里访问 shared_ptr<U>m_refCountPtrm_refCountPtrshared_ptr 模板 class 的私有成员。我知道无法访问私有成员,那么编译器可能是如何实现此功能的?

Boost 通过使用模板成员好友或使成员成为 public 来解决此问题,具体取决于定义 BOOST_NO_MEMBER_TEMPLATE_FRIENDS.

的值

例如朋友声明如下所示:

template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;