use*_*215 50 c++ destructor global-variables
从我的示例程序看,在两种情况下看起来都会调用析构函数.它在什么时候调用全局变量和类静态变量的析构函数,因为它们应该在程序堆栈的数据部分中分配?
out*_*tis 63
从C++ 03标准的第3.6.3节开始:
用于静态存储持续时间的初始化对象的析构函数(12.4)(在块作用域或命名空间作用域中声明)作为从main返回并由于调用exit(18.3)的结果而被调用.这些对象以其构造函数完成或动态初始化完成的相反顺序销毁.如果对象是静态初始化的,则对象的破坏顺序与对象动态初始化的顺序相同.对于数组或类类型的对象,在破坏子对象构造期间初始化静态存储持续时间的任何本地对象之前,将销毁该对象的所有子对象.
此外,§9.4.27规定:
静态数据成员的初始化和销毁与非本地对象完全相同(3.6.2,3.6.3).
但是,如果析构函数没有可观察的行为,则可能无法调用它.Terry Mahaffey在他的回答中详细说明了这个问题"C++析构函数是否保证在块结束之前不被调用?" .
在“主要”之后的某个地方
(你不能知道或依赖它们被调用的确切顺序)