关于显式调用虚拟析构函数的问题:
有以下两个基类和派生类:
class abcd
{
public:
abcd()
{}
virtual ~abcd()
{
printf("destructor abcd\n");
}
};
class bcde : public abcd
{
public:
bcde()
{
}
virtual ~bcde()
{
printf("destructor bcde\n");
}
};
现在将一个基类指针指向派生类:
abcd* aa = new bcde;
显式调用基类的析构函数:
aa->~abcd();
请问结果如何?
如果基类的析构函数没有声明为虚函数,结果是否一样呢?
下面公布答案:
对于第一种情况来说:
神迹发生了,虽然我们申明的是调用基类的析构函数,实际结果却是调用了派生类的析构函数,同时隐式调用了基类的析构函数
对于第二种情况来说:
神迹消失了,只有基类的析构函数被调用
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=106577