Initialisierungsreihenfolge von static-Members



  • Folgender Code:

    class C1
    {
      //...
      public:
      C1()
      {
        //...
      }
      static int i;
    };
    int C1::i = 302;   //Fraglich 1
    
    class C2
    {
      //...
      public:
      static C1 c1;
    };
    C1 C2::c1;        //Fraglich 2
    

    Kann ich mich darauf verlassen, dass immer zuerst C1::i und dann C2::c1 initialisiert wird (auch wenn z.B. die erste fragliche Zeile in einem anderen Modul ist als die zweite), oder ist das undefiniert.



  • Ja, kannst Du!

    Die Initialisierung von c1 sollte spätestens an der Stelle erfolgen,
    wo c2 sein statisches Element initialisiert. Bevor die Initialisierung
    von c2 beendet ist, wird die von c1 abgeschlossen.

    Gruß

    Oliver



  • Nein, kannst du nicht!
    Und zwar genau dann nicht, wenn die Variablen in verschiedenen Modulen liegen, da dann die Initialisierungsreihenfolge von statics undefiniert ist.

    Stefan.


Anmelden zum Antworten