无论如何命令静态对象初始化差异类(差异文件)

时间:2014-01-15 11:03:26

标签: c++ initialization

WORKSPACE_A.cpp / .H

Class WORKSPACE_A {
   static AAA a;
}

WORKSPACE_B.cpp / .H

   Class WORKSPACE_B {
       static BBB b;
    }

我如何知道AAA a或BBB b是否先被初始化。

谢谢

4 个答案:

答案 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 answerC++ global initialization order ignores dependencies?