[求助]C++析构函数调用问题

cll131421 2014-12-26 03:57:29
基类A
派生类B
代码如下:
A *pA = new B();
delete A;
A = NULL;

如果A的析构函数设为virtual,那么析构调用顺序是派生类,基类;
而如果A的析构函数不是virtual,那么将会只调用基类A的析构函数;
请问这是为什么?
测试代码如下:
#include <iostream>

class CBase
{
public:
~CBase()
{
printf("CBase destruct\n");
}
virtual void PrintInfo() = 0;
};

void CBase::PrintInfo()
{
printf("this is a pure virtual function\n");
}

class CDerived : public CBase
{
public:
~CDerived()
{
printf("CDerived destruct\n");
}
void PrintInfo()
{
printf("this is a derived overide function\n");
CBase::PrintInfo();
}
};

void TestPureVitualFunc()
{
CBase *pB = new CDerived();
pB->PrintInfo();
delete pB;
pB = NULL;
}
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2014-12-26
  • 打赏
  • 举报
回复
去看看虚函数多态的章节就是了。
cll131421 2014-12-26
  • 打赏
  • 举报
回复
当子类指针或引用转换为基类时,若基类中有用virtual定义的函数,被子类重写后,此基类对象就会根据子类调用子类中的重写后的函数,而不是基类中的函数;反之,若是基类中没有用virtual定义,则不管基类被赋值的是哪个子类的值,调用的都是基类的成员函数
如影随从 2014-12-26
  • 打赏
  • 举报
回复
自己搜搜虚析构的知识看看。
cll131421 2014-12-26
  • 打赏
  • 举报
回复

64,691

社区成员

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

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