WORKSPACE_A.cpp / .H
Class WORKSPACE_A {
static AAA a;
}
WORKSPACE_B.cpp / .H
Class WORKSPACE_B {
static BBB b;
}
我如何知道AAA a或BBB b是否先被初始化。
谢谢
答案 0 :(得分:1)
正如@Denny所述,问题可能是两者之间的依赖关系。
我认为可行的方法是使用指针和显式静态初始化函数:
class WORKSPACE_A {
static AAA* a;
public:
static void initialize() { /* a = ... */ }
}
class WORKSPACE_B {
static BBB* b;
public:
static void initialize() { /* b = some_f(WORKSPACE::a) */ }
}
答案 1 :(得分:1)
这称为"static initialization order fiasco"
一种常见的方法是在“访问者功能”中使用初始化初始化
class WORKSPACE_A {
AAA& getA()
{
static AAA a;
return a;
}
}
当然,您仍然需要“静态销毁订单惨败”......这可以通过在访问器(static AAA *a = new AAA;
)中动态分配AAA来缓解,但是对象只是从不< / em>被破坏了!
答案 2 :(得分:0)
否强>
标准说这是未定义的。
答案 3 :(得分:0)
每个翻译单元都保证全局变量(或静态)的初始化顺序。但不保证在不同的翻译单位。
请参阅问题this answer的C++ global initialization order ignores dependencies?。