如何为我自己的 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_refCountPtr
?
m_refCountPtr
是 shared_ptr
模板 class 的私有成员。我知道无法访问私有成员,那么编译器可能是如何实现此功能的?
Boost 通过使用模板成员好友或使成员成为 public 来解决此问题,具体取决于定义 BOOST_NO_MEMBER_TEMPLATE_FRIENDS
.
的值
例如朋友声明如下所示:
template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;
我正在尝试自己实现共享 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_refCountPtr
?
m_refCountPtr
是 shared_ptr
模板 class 的私有成员。我知道无法访问私有成员,那么编译器可能是如何实现此功能的?
Boost 通过使用模板成员好友或使成员成为 public 来解决此问题,具体取决于定义 BOOST_NO_MEMBER_TEMPLATE_FRIENDS
.
例如朋友声明如下所示:
template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;