【发布时间】:2013-06-21 23:47:31
【问题描述】:
因此,在块\程序的末尾,编译器调用它自己的析构函数来定义对象。调用析构函数有特定的顺序吗?
class Foo1{
public:
~Foo1 () {cout << "Foo1 DTOR" << endl;}
};
class Foo2{
public:
~Foo2 () {cout << "Foo2 DTOR" << endl;}
};
void main(){
Foo1 A;
Foo2 B;
}
运行这个程序我得到了输出:
Foo2 DTOR
Foo1 DTOR
它是否总是从最后一个定义的对象开始并以第一个对象结束?或者这种行为无法预测,而我的输出是针对这种情况的?
【问题讨论】:
-
是的,事情通常是这样运作的。例外情况是一个只能在一个方向上遍历的集合(例如,单链表),在这种情况下,它包含的对象会按照它们的创建顺序被销毁。
-
为什么调用它们的顺序很重要?这只是好奇吗?
-
多个重复:搜索 [:C++] 析构函数顺序
-
这就是你观察到的栈式内存的LIFO原理。
-
@Pixelchemist 这也是我的假设,但不确定,不幸的是没有花足够的时间在谷歌上搜索更多问题(或 mb 谷歌搜索错误)
标签: c++ destructor