在最近的一场辩论中,Daniel Lidström 断言,shared_ptr
在没有虚拟析构函数的情况下实现 Shared_Ptr
这个实现的关键在于类型擦除。 Shared_ptr 不仅仅存储引用计数器;它包括一个处理对象销毁的删除器(作为数据结构的一部分存储)。这个删除器可以是任何类型,允许超出T(shared_ptr的模板类型)范围的定制。
派生类的定制
创建shared_ptr时< ;基地>从 Derived 对象中,调用模板化构造函数,从而允许指定具体类型 Derived。构造函数根据动态类型创建必要的删除器,即使 Base 中没有虚拟析构函数,也能确保正确的对象销毁。
示例实现
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
上述构造函数允许创建一个shared_ptr
C 11 标准要求
C 11 标准明确要求此行为:
以上是'shared_ptr”可以在'Base”中没有虚拟析构函数的情况下管理'派生”对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!