我正在尝试自己实现共享ptr模板类。
InvokeAsync
的别名构造函数的原型是
shared_ptr
我已经实现了转换构造函数,如下所示,
template< class Y >
shared_ptr( const shared_ptr<Y>& r, element_type *ptr );
Q1。如何在此处访问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++;
}
}
m_refCountPtr
?
shared_ptr<U>
是m_refCountPtr
模板类的私有成员。我知道私有成员无法访问然后编译器可能如何实现此功能?
答案 0 :(得分:1)
Boost通过使用模板成员朋友或公开成员来解决此问题,具体取决于定义BOOST_NO_MEMBER_TEMPLATE_FRIENDS
的值。
例如,朋友声明如下:
template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;