调用抽象类的析构函数

Calling abstract classes' destructors

本文关键字:析构函数 抽象类 调用      更新时间:2023-10-16

我有三个类。

class Son : public Father;
class Father : public Grandfather;

Father是抽象的,Grandfather也是如此。Son不是抽象的。

如果我这样做:

Son* son = new Son();

然后执行此操作:

delete(son)

我如何确保FatherGrandfather的破坏者称为?

父母类的破坏者无论是什么。

不过,您应该使顶级类的破坏者virtual删除,因此您可以删除指向Grandfather的指针,并确保所有子类的破坏者也被称为。不这样做会导致不确定的行为,这总是一件坏事。

函数是virtual,它将是整个派生树的虚拟,无需在子类中标记它。但是,这样做通常是很好的形式,它可以帮助人们阅读代码。