可能重复:
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 -
答案 0 :(得分:4)
Some
构造函数将在第一次调用globalFunction()
时运行。这在Scott Meyer的Effective C ++,Item 4中进行了讨论。
这是由标准强制执行的。
请注意,析构函数可能仍有问题!一般来说,不可能知道删除这个对象何时是安全的,另一个线程(也许是过去的主体)可能会在本地静态被破坏后调用这个函数,因此,这些对象经常被创建“泄露”他们用'新'。
但是,请注意,创建这样的静态对象无论如何都不是线程安全的。
全局静态对象将在main之前构造,它是一个未定义的顺序。