会在程序结束时销毁(全局)静态变量吗?

tow*_*owi 1 c++ destructor lifetime

可能重复:
C++是否为全局和类静态变量调用析构函数?

什么是寿命

  • 全球 MyClass myclass;
  • 全球 static MyClass myclass;
  • 全球 const MyClass myclass;
  • 全球 static const MyClass myclass;
  • static MyClass myclass;在初始化实际发生时函数本地
  • global static constexpr MyClass myclass;in C++ 11

尤其是它们会在正常程序结束时被销毁(即main没有错误)?标准在哪里如此陈述.

我注意到私有析构函数阻止了所有这些变量的创建.但是,如果我没记错的话,某处已明确提到某些静态数据可能会被放入静态数据部分并加载预先构建的部分.这对我来说意味着不会召唤析构函数.这意味着我可以定义这样一个变量......

Jam*_*nze 6

具有静态生命周期的对象的析构函数(您提到的所有情况都定义了具有静态生命周期的对象 - 虽然我不认为一个对象constexpr可以具有非平凡的析构函数)是从内部调用的exit(),但是以相反的顺序调用对象建成了.

从使用返回值调用的main原因exit返回,因此从main返回将导致调用这些析构函数.其他程序终止方式(abort()断言失败_exit()等)不会调用析构函数.

如果对象在DLL中(.so在Unix下),则在卸载DLL时通常会调用析构函数.