纯抽象类的虚拟析构函数

用户名

根据我在这里发现的内容以及stackoverflow上的其他链接,如果我们打算多态使用它,则应始终在基类中定义一个虚拟析构函数。我想知道这个规则是否有例外。

我见过没有为纯抽象基类定义虚拟析构函数的生产代码,并且在cppcon 2014视频之一“不接受访客”中,大约10:06定义的BoolExp结构是纯抽象类,没有虚拟析构函数。

所以对于这样定义的纯抽象类

  class Base {
      public:
         virtual foo() = 0;
         virtual bar() = 0;
     }

我的问题是,即使它确实具有任何数据成员,也绝对必须为“ Base”类定义虚拟析构函数吗?虚拟析构函数规则是否有例外?

提前致谢。

最好,RG

内森·奥利弗

我的问题是,即使它确实具有任何数据成员,也绝对必须为“ Base”类定义虚拟析构函数吗?

这取决于。如果你有这样的情况

base * foo = new child(stuff);
// doing stuff
delete foo;

那么您绝对必须拥有一个虚拟的析构函数。没有它,您将永远不会破坏child零件。

如果你有这样的情况

child * foo = new child(stuff);
// doing stuff
delete foo;

然后,您将不需要虚拟析构函数,因为child将调用。

因此,规则是,如果您删除多态,则需要一个多态(虚拟)析构函数,如果没有,则不需要

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章