2

我有三个班。

class Son : public Father;

class Father : public Grandfather;

Father是抽象的,也是GrandfatherSon不是抽象的。

如果我这样做:

Son* son = new Son();

然后这样做:

delete(son)

如何确保调用Fatherand的析构函数Grandfather

4

1 回答 1

3

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

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

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

于 2012-10-20T23:31:47.273 回答