什么时候正好是静态本地对象的构造函数?

Hon*_*bas 5 c++ static constructor local

可能重复:
C++函数中静态变量的生命周期是多少?

假设我们有这样的代码:

Some class {
  Some() { // the ctor code }
};

Some& globalFunction()
{
  static Some gSome;
  return gSome;
}
Run Code Online (Sandbox Code Playgroud)

什么时候执行'ctor code'?至于main()之前的正常静态变量,还是我们第一次调用'globalFunction()'时?

它是如何在不同的平台和不同的编译器(cl,gcc,...)?

谢谢

-hb-

Ste*_*hen 5

Some构造函数将在第一次调用运行globalFunction()。这在 Scott Meyer 的 Effective C++,第 4 项中进行了讨论。

这是由标准强制执行的。

请注意,析构函数可能仍然存在问题!一般来说,不可能知道什么时候删除这个对象是安全的,另一个线程(可能在 main 之后)可能会在本地静态被破坏后调用这个函数,因此,这些对象经常通过创建“泄漏”他们用'新'。

但是,还要注意创建这样的静态对象无论如何都不是线程安全的。

全局静态对象将在 main 之前构造,它是一个未定义的顺序。