如何编写具有多级继承的重要析构函数?

时间:2019-03-29 23:07:35

标签: c++

我想知道在处理多级继承时实现虚拟析构函数的正确方法是什么。

所以让我介绍一下这个简单的例子:

#include <iostream>

using namespace std;

struct A {

  virtual ~A() { cout << "~A()" << endl; }

};

struct B : A {
  ~B() { cout << "~B()" << endl; }
};

struct C : B {
  ~C() { cout << "~C()" << endl;  }
};

struct D : B {
  ~D() { cout << "~D()" << endl; }
};

int main() {
  A* a = new C();
  B* b = new D();
  delete a;
  delete b;
}

所以afaik,当基类将其析构函数声明为虚拟时,它将在删除后正确调用其子代的析构函数。我担心的是,当我同时在删除a 删除b 两种情况下运行此代码时,子代被正确销毁了,而我当时认为只有删除a才能达到目的。

这是正确的行为吗?如果是这样,是否意味着A的每个子类都将其析构函数声明为虚拟的,即使未明确指定它也可以安全地假定它们将被正确删除?

0 个答案:

没有答案