Lidström先生的主张是,构造shared_ptr<Base> p(new Derived);
不需要Base具有虚拟析构函数:
Armen Tsirunyan:“真的吗?shared_ptr会正确清理吗?在这种情况下,请您演示一下如何实现这种效果?”
DanielLidström:“ shared_ptr使用其自己的析构函数来删除Concrete实例。在C ++社区中被称为RAII。我的建议是,您将学习到有关RAII的全部知识。它将使您使用C ++的代码如此容易在任何情况下都可以使用RAII。”
Armen Tsirunyan:“我了解RAII,而且我也知道,最终pn达到0时,shared_ptr析构函数可能会删除存储的px。但是,如果px具有指向的静态类型指针
Base
和动态类型的指针Derived
,则除非Base
具有虚拟析构函数,否则会导致不确定的行为。如果我做错了,请纠正我。”DanielLidström:“ shared_ptr知道静态类型是Concrete。自从我在其构造函数中传递它以来,它就知道这一点!看起来有点像魔术,但是我可以向您保证,它是设计使然,非常好。”
所以,判断我们。在不要求多态类具有虚拟析构函数的情况下,如何(如果可能)实现shared_ptr?提前致谢