没有多态类虚拟析构函数的 Shared_Ptr 实现
Armen Tsirunyan 和 Daniel Lidström 关于 share_ptr 实现的虚拟析构函数的必要性的争论中,确实可以设计一个不需要这样的shared_ptr
技术实现
这个实现的关键在于类型擦除。 Shared_ptr 不仅管理引用计数器,还管理存储在同一内存块中的删除器对象。该删除器的类型与shared_ptr的类型不同,允许灵活地管理具有不同动态类型的对象。
引入了模板化构造函数:
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
当使用a构造shared_ptr时派生类的指针(例如,shared_ptr
C 11 标准要求
C 11 标准明确定义了此构造函数的要求:
对于析构函数:
因此,shared_ptr 实现利用类型擦除并仔细管理删除器以有效地处置具有不同动态类型的对象,即使不需要多态类中的虚拟析构函数。
以上是在没有多态类虚拟析构函数的情况下,shared_ptr 可以工作吗?的详细内容。更多信息请关注PHP中文网其他相关文章!