分析程序执行过程

谢耳朵 2012-10-03 09:49:09

class Base
{
public:
int m_a;
Base (int a = 2) : m_a(a) {}
virtual ~Base() {printf( " A %d", m_a);}
};
class Derived : public Base
{
public:
Derived (int a =4) : Base (a) {}
virtual ~ Derived () {printf( "B %d", m_a);}
};

int main()
{
Base *aa, bb;
Derived cc(3);
aa = new Derived;
delete aa;
system( "pause");
return 0;
}



帮忙解释 程序执行的流程 特别是析构的时候, 没想明白
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxy10 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

soga! 我说奇怪了 怎么 bb cc 都不用析构的呢。

那是不是不能加 system(“pause”)了呢?

引用 3 楼 的回复:

1,析构函数的执行顺序是从派生类到基类的;
2,delete执行的时候是调用对象的析构函数的;
3,局部对象的析构发生在函数执行完毕返回时;
所以:
运行到system(“pause”)时,
只执行了aa对象的析构函数,……
[/Quote]

可以加,在它结束之后,main函数返回的时候,aa也是会析构的。
谢耳朵 2012-10-03
  • 打赏
  • 举报
回复
soga! 我说奇怪了 怎么 bb cc 都不用析构的呢。

那是不是不能加 system(“pause”)了呢?

[Quote=引用 3 楼 的回复:]

1,析构函数的执行顺序是从派生类到基类的;
2,delete执行的时候是调用对象的析构函数的;
3,局部对象的析构发生在函数执行完毕返回时;
所以:
运行到system(“pause”)时,
只执行了aa对象的析构函数,
而还没有执行cc的析构函数。
[/Quote]
huangxy10 2012-10-03
  • 打赏
  • 举报
回复
1,析构函数的执行顺序是从派生类到基类的;
2,delete执行的时候是调用对象的析构函数的;
3,局部对象的析构发生在函数执行完毕返回时;
所以:
运行到system(“pause”)时,
只执行了aa对象的析构函数,
而还没有执行cc的析构函数。
谢耳朵 2012-10-03
  • 打赏
  • 举报
回复
delete的时候 是不执行析构函数的吗

64,651

社区成员

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

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