总结:自己类型的指针指向自己的对象,怎么样都没有问题(不管父类析构函数写不写virtual)。只有基类指针指向子类对象的时候,一定需要virtual关键字的配合,才能正确的工作
然后通过 delete 接父类指针释放子类对象 此时,虚函数表的工作: 如果在父类中定义了虚析构函数,那么...
总结:自己类型的指针指向自己的对象,怎么样都没有问题(不管父类析构函数写不写virtual)。只有基类指针指向子类对象的时候,一定需要virtual关键字的配合,才能正确的工作。
先调用子类的析构函数,后调用父类的析构函数!因为子类继承父类时,是从父类中集成域和方法,当然先要初始化父类的构造函数!但是释放对象时,子类的数据还是依赖与父类中的数据,故不可先释放父类中的数据,即先调用子类的析构函数,后是子类的析构函数!
--- 事实上,「调用直接父类的析构函数」是任何「析构函数」的本职工作,和虚不虚无关。问题中的 ...
结论:删除子类指针,无论如何会自动调用祖先类的析构函数(即使祖先类的习惯函数不是虚拟的),虽然这是非正常情况,但还是记一下。 --- class A { public: A() { printf("A \n"); } virtual~A() { printf(" ~A \n"); }// 增加了虚拟关键字 }; class B : public ...