迈耶斯单身人士取决于local static variable initialization is atomic这一事实。C++是静态变量初始化= atomic?
我正在构建类似的东西,但我希望单例实际上是一些派生类型之一。基类getInstance()
方法应调用将返回适当类型的工厂。
我的第一个想法是
static Foo *instance = FooFactory(...);
的N3337 8.5p2似乎表明,这是严格的初始化和未初始化和赋值,我理解这意味着整个语句是原子。它是否正确?
如果不将声明
static Foo *instance(FooFactory(...));
有所不同呢?
编辑8.5.2 - > 8.5.p2
如果我看到一个创建线程的静态初始化,我会立即提出关于开发人员的管理问题:) – SergeyA
特别令人兴奋的是,如果我们正在讨论一个Windows DLL - 在DllMain里面几乎什么都做(这是什么静态init)会导致静态加载器锁死锁:-) –