c++ - 纯抽象类的虚拟析构函数

标签 c++ abstract-class virtual-destructor

<分区>

根据我的发现here在 stackoverflow 上的其他链接上,如果我们计划以多态方式使用它,我们应该始终在基类中定义一个虚拟析构函数。我想知道这条规则是否有异常(exception)。

我在 cppcon 2014 视频之一中看到了没有为纯抽象基类定义虚拟析构函数的生产代码 Accept no visitor ,大约 10:06 定义的 BoolExp 结构是一个纯抽象类,没有虚拟析构函数。

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

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

我的问题是我们绝对必须为“基”类定义一个虚拟析构函数,即使它确实有任何数据成员?虚拟析构函数规则是否有任何异常(exception)?

提前致谢。

最好的, RG

最佳答案

My question is it absolutely must that we define a virtual destructor for "Base" class, even though it does have any data members?

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

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

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

如果你遇到这样的情况

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

那么你不需要虚拟析构函数,因为 child 将被调用。

所以规则是如果你多态删除,你需要一个多态(虚拟)析构函数,如果不是,那么你不需要

关于c++ - 纯抽象类的虚拟析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57275522/

相关文章:

c++ - 简单递归题

android - 如何创建基本 fragment 以便子 fragment 可以从它们扩展以在 OnCreateView 函数中设置适配器?

c# - 抽象类可以包含公共(public)方法吗?

c++ - 非虚拟析构函数c++的异常

c++ - 在 C++11 中的析构函数之后覆盖标识符

c++ - 将值转换为 c++ 范围内的值,使用 boost 或 std 进行优化

c++ - 具有 STL 容器成员的模板类

C++ 指向虚函数的指针

c++ - C++中的抽象类

c++ - 虚拟析构函数有什么用?