调用抽象类的析构函数

时间:2012-10-20 23:29:43

标签: c++ virtual-destructor

我有三节课。

class Son : public Father;

class Father : public Grandfather;

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

如果我这样做:

Son* son = new Son();

然后执行此操作:

delete(son)

如何确保调用FatherGrandfather的析构函数?

1 个答案:

答案 0 :(得分:3)

无论如何,都会调用指针父类的析构函数。

您应该创建顶级类的析构函数virtual,这样您就可以删除指向Grandfather的指针并确保调用所有子类的析构函数。不这样做会导致未定义的行为,这总是一件坏事。

一旦函数为virtual,它对整个派生树都是虚拟的,不需要在子类中标记它。但是,这通常是一种很好的形式,它可以帮助人们阅读代码。