课程
/后端开发
/C++
/C++远征之封装篇(下)
为什么这里的析构函数的调用顺序仍然是和构造函数的顺序一样呢?不是应该反过来,先析构line()再析构Coordinate()吗?为什么这里不是呢??
2015-06-21
源自:C++远征之封装篇(下) 4-5
正在回答
我的理解是这样的:因为 m_pCoorA 和 m_pCoorB 指向‘堆’中的两块内存(Line.cpp中的定义),而Line *p 是‘栈’中的一个指针,所以因为“堆中的内存比较重要”,所以先释放堆中的内存,也就先调用m_pCoorA和 m_pCoorB的析构函数(~Coordinate()),再调用Line的析构函数
要是在栈中的情况的话是出栈的时候是要反过来析构的,但是在堆中就不是反过来的了,区别在这里
Coordinate 的析构函数在 delete coordinate 的时候就调用了,因为 Line 的析构函数是先 delete 两个 coordinates,然后再打印,所以显示的顺序就是图上显示的那样。
这是在堆中创建的对象~不按先进后出原则;delete了就调用析构函数~
也看不见你的代码。。。怎么分析呢。。。?
阿西吧233333
举报
封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通