关于一个虚析构函数的问题
#include <iostream>using namespace std;
class Base
{ public:
Base(){}
virtual ~Base(){cout<<"Base destructor is called"<<endl;}
};
class Subclass:public Base
{ public:
Subclass(){}
~Subclass();
};
Subclass::~Subclass()
{ cout<<"Subclass destructor is called."<<endl;
}
int main()
{ Base *b=new Subclass;
delete b;
return 0;
}
问题1:
为什么上述的~Subclass是虚析构函数,虚函数如果要省略virtual时必须保证于基类中的虚函数原型相同才可以省略不是吗?
问题2:
假设问题一成立,delete b这个语句应该只有输出Subclass destructor is called,为什么后面还会输出Base destructor is called呢,不是一条delete只对应一个析构函数吗??