不论基类的析构函数是否为virtual的,派生类的对象在过期时都是先调用自己析构函数,然后再调用基类的析构函数。
另外:
virtual的作用是“让基类能够正确调用派生类的函数”
所以派生类自己(不管是对象还是指针)的析构根本不受virtual的影响,永远是“先调用自己的析构函数再调用基类的析构函数”析构函数使用virtual的作用是“当使用基类指针指向派生类的时候,delete该指针可以正确调用派生类的析构函数”
class A
{
public:
A(){};
~A(){}
};
class B : public A
{
public:
B(){};
~B(){};
};
如果你的代码只是:
B *b = new B; delete b;那是肯定先调B的析构,然后调A的析构
但是如果是这样的多态形式
A *a = new B; delete a; 这个时候的析构只调用了基类A的析构,如果把A的析构函数定义成virtual的,那就会先调B的析构,然后调A的,所以涉及到继承的,最好把父类的析构函数定义成vritual形式
C++ 派生类的析构函数的调用顺序为:
A) 基类、派生类和对象成员类的析构函数
B) 派生类、对象成员类和基类的析构函数
C) 对象成员类、派生类和基类的析构函数
D) 派生类、基类和对象成员类的析构函数
答案是选着B,