关于c++虚函数,以及虚析构函数

//A是B的基类,A的析构函数是虚函数
int main()
{
A *p=B;
delete p;
return 0;
}
//为什么,A和B的析构函数都会被调用?
//另外,为什么当基类的析构函数不是虚函数时,就是调用基类的析构函数

语法就是这么规定的,参考:http://blog.sina.com.cn/s/blog_88337d9601010k8q.html

我们在书写派生类的析构函数的时候,也不需要显示的调用基类的析构函数。派生类的析构函数(不论你是否显式地定义了)自动调用基类子对象的析构函数。基类在成员对象之后被析构。在多重继承的情况下,直接基类以出现在继承列表中的顺序的反序被析构。

如果不是虚函数,那么编译器无法找到动态绑定的指针指向派生类的虚表,只能找到指针类型,所以只有基类的析构函数被调用

《C++全方位学习》 范磊编著 p225 有讲虚析构函数, 推荐此书。