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

时间:2010-06-17 15:21:13

标签: c++ static constructor local

  

可能重复:
  What is the lifetime of a static variable in a C++ function?

假设我们有这样的代码:

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

Some& globalFunction()
{
  static Some gSome;
  return gSome;
}

何时执行'ctor code'?至于main()之前的正常静态变量,或者我们第一次调用'globalFunction()'?

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

由于

-HB -

1 个答案:

答案 0 :(得分:4)

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

这是由标准强制执行的。

请注意,析构函数可能仍有问题!一般来说,不可能知道删除这个对象何时是安全的,另一个线程(也许是过去的主体)可能会在本地静态被破坏后调用这个函数,因此,这些对象经常被创建“泄露”他们用'新'。

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

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