1
根据对这个问题C++ static initialization order的回答,似乎不可能直接控制静态初始化的顺序。 但是,假设我要在构造函数中为静态初始化对象foo
显式初始化静态变量,该对象依赖于不同的全局对象bar
。在调用时,有没有一种方法让foo
的构造函数确定bar
是否已被静态初始化?是否有可能检查一个静态变量是否已在C++中初始化?
也就是说,假设我有一个编译单元。
Foo::Foo() {
// Can I check here whether bar has already been initialized?
// do something that needs bar to be initialized
// If bar has not been initialized, then I will crash and burn.
}
// statically initialized foo
Foo foo;
在不同的编译单元:
的目标是确保bar
是(静态调用)构造函数之前foo
运行到它需要bar
点初始化。 我们可以明确地在foo
的构造函数中启动bar
,但是我们需要知道bar
是否已经被初始化。
是实施,具有功能静态变量。但总的来说,我会建议一起避免这个问题,只是初始化主函数中的所有内容。 – yngccc
是:为Bar添加一个静态的'initialized'标志,必要时使用异步锁来保护它? –
我希望你在这里没有A-> B->循环依赖。 – tadman