为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这里的析构函数顺序和对象数据成员不一样呢?

为什么这里的析构函数的调用顺序仍然是和构造函数的顺序一样呢?不是应该反过来,先析构line()再析构Coordinate()吗?为什么这里不是呢??

正在回答

5 回答

我的理解是这样的:因为 m_pCoorA 和 m_pCoorB 指向‘堆’中的两块内存(Line.cpp中的定义),而Line *p 是‘栈’中的一个指针,所以因为“堆中的内存比较重要”,所以先释放堆中的内存,也就先调用m_pCoorA和 m_pCoorB的析构函数(~Coordinate()),再调用Line的析构函数

0 回复 有任何疑惑可以回复我~

要是在栈中的情况的话是出栈的时候是要反过来析构的,但是在堆中就不是反过来的了,区别在这里

2 回复 有任何疑惑可以回复我~

Coordinate 的析构函数在 delete coordinate 的时候就调用了,因为 Line 的析构函数是先 delete 两个 coordinates,然后再打印,所以显示的顺序就是图上显示的那样。

0 回复 有任何疑惑可以回复我~

这是在堆中创建的对象~不按先进后出原则;delete了就调用析构函数~

0 回复 有任何疑惑可以回复我~

也看不见你的代码。。。怎么分析呢。。。?

0 回复 有任何疑惑可以回复我~
#1

阿西吧233333

这是课里的内容啊
2016-05-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

为什么这里的析构函数顺序和对象数据成员不一样呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信