黄色潜水艇

十年

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  132篇文章 :: 1篇收藏:: 163篇评论:: 1个Trackbacks

公告

Subscribe with Bloglines

文章

收藏

相册

篮球飞人

我常去的Blog

存档


正在读取评论……


关于显式调用虚拟析构函数的问题:

有以下两个基类和派生类:

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


[点击此处收藏本文]  发表于2004年09月22日 5:09 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论