2013-11-22 37 views
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是否已经被初始化。

+0

是实施,具有功能静态变量。但总的来说,我会建议一起避免这个问题,只是初始化主函数中的所有内容。 – yngccc

+0

是:为Bar添加一个静态的'initialized'标志,必要时使用异步锁来保护它? –

+0

我希望你在这里没有A-> B->循环依赖。 – tadman

回答

1

不,这是不可能的,但如果你想看看如何实现的东西,总是在使用前初始化,看看std::cout

相关问题