我试图通过从头开始实现 shared_ptr 来了解它是如何工作的,但我不知道如何检测 T 的基类。
我试过使用 is_base_of(),但它给出了一个 const 值,我不能用 if 语句来设置对象的内部weak_ptr。
我是这样想的:
template <class T>
class shared_ptr
{
shared_ptr(T* ptr)
{
...
}
shared_ptr(enable_shared_from_this<T>* ptr)
{
...
Ptr->m_this = weak_ptr<T>(this);
}
};
但到目前为止还没有运气。Boost 和 VC++ 的实现对我来说太混乱了,我正在寻找一个简单的解释。
这里说
std::shared_ptr 的构造函数检测 enable_shared_from_this 基的存在并将新创建的 std::shared_ptr 分配给内部存储的弱引用。
是啊,怎么样?