C ++是否调用全局和类静态variables的析构函数?

从我的示例程序看来,它在两种情况下都会调用析构函数。 在什么时候它会调用析构函数的全局variables和类静态variables,因为它们应该被分配到程序堆栈的数据部分?

从C ++ 03标准的第3.6.3节:

初始化静态存储持续时间的对象(在块作用域或命名空间作用域中声明)的析构函数(12.4)作为从main返回的结果和作为调用exit(18.3)的结果被调用。 这些对象按照构造函数完成或dynamic初始化完成的相反顺序销毁。 如果一个对象被静态初始化,那么这个对象就会被以同样的顺序销毁,就像对象被dynamic初始化一样。 对于数组或类types的对象,在构造子对象期间初始化具有静态存储持续时间的局部对象被销毁之前,该对象的所有子对象都被销毁。

此外,§9.4.2 7指出:

静态数据成员与非本地对象(3.6.2,3.6.3)一样被初始化和销毁​​。

但是,如果析构函数没有可观察到的行为,则可能不会被调用。 Terry Mahaffey在他的回答中详细说明了这个问题:“C ++析构函数是否保证不会在块结束之前被调用? 。

某处在“主”

(你不能知道或不依赖于被调用的确切顺序)