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