一个虚析构函数的问题

aoyihuashao 2012-07-23 03:39:29




class Base
{
public:
virtual ~Base()
{
std::cout << " ~Base()" << std::endl;
}
};

class Derive1 : public Base
{
public:
~Derive1()
{
std::cout << " ~Derive1()" << std::endl;
}
};

class Derive2 : public Derive1
{
public:
~Derive2()
{
std::cout << " ~Derive2()" << std::endl;
}
};

class Derive3 : public Derive2
{
public:
~Derive3()
{
std::cout << " ~Derive3()" << std::endl;
}
};


void main()
{
Derive1 *pObj = new Derive3();

delete pObj;
}



上面代码的运行结果是:
~Derive3()
~Derive2()
~Derive1()
~Base()



如果Derive1 不继承 Base,那结果就是 ~Derive1()

为什么?

而且即便Base是实析构,Derive1是虚析构,仍然会四个析构全调用。

莫非只要其中一个类的析构函数是虚的,这一串类就都具备虚析构函数的功能了?

...全文
68 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoyihuashao 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
[/Quote]

那怎么解析中间一个类是虚析构的话,父类的析构也被调用到了呢?

cbzjzsb123 2012-07-23
  • 打赏
  • 举报
回复
这就是继承++
shen_wei 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
[/Quote]

这就是继承++
W170532934 2012-07-23
  • 打赏
  • 举报
回复
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
W170532934 2012-07-23
  • 打赏
  • 举报
回复
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
zhanshen2891 2012-07-23
  • 打赏
  • 举报
回复
那就是呗,我只知道在设计基类的时候如果希望析构函数必须被调用就加虚

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧