我有三节课。
class Son : public Father;
class Father : public Grandfather;
Father
是抽象的,Grandfather
也是如此。 Son
不是抽象的。
如果我这样做:
Son* son = new Son();
然后执行此操作:
delete(son)
如何确保调用Father
和Grandfather
的析构函数?
答案 0 :(得分:3)
无论如何,都会调用指针父类的析构函数。
您应该创建顶级类的析构函数virtual
,这样您就可以删除指向Grandfather
的指针并确保调用所有子类的析构函数。不这样做会导致未定义的行为,这总是一件坏事。
一旦函数为virtual
,它对整个派生树都是虚拟的,不需要在子类中标记它。但是,这通常是一种很好的形式,它可以帮助人们阅读代码。