2009-04-25 14 views
2

Ich habe ein C++ - Programm, das aufgrund eines Fehlers abgestürzt ist. Es würde nicht einmal zu main gelangen, da auf einen NULL-Zeiger in einer seiner Konstruktorfunktionen des statischen globalen Objekts zugegriffen wurde. Zu allem Überfluss war der Zeiger NULL, sollte aber von einer anderen globalen statischen Variable gesetzt worden sein. Ich denke, ich kann diese globalen Variablen in eine Funktion einbinden, die globale Zeiger auf die Objekte setzt. Ich weiß, dass die Globals neu gestaltet werden müssen. Ich weiß auch, dass die Reihenfolge der globalen statischen Objekte nicht bekannt ist. Ich bleibe neugierig - gibt es eine gute Methode, um die Reihenfolge der statischen globalen Objektinitialisierung zu steuern?C++ statische globale Objekte Workarounds?

Vereinfachtes Beispiel (ENTFERNT ETC ERROR KONTROLLE LOGGING)

[game.cpp]

Point UpperLeft(-1024.1024); //Global Evilness 

int InitializeGobals() 
{ 
    ... 
} 


int main (int argc, char ** argv) 
{ 
    if (!InitializeGame()) 
     Die("Initialization Failure"); 

    WriteHighScore(UpperLeft); 
} 

ich die alle statischen Objekte, um mit angeben möchten:

[prptedgame.cpp]

Point *UpperLeft; 
int InitializeGobals() 
{ 
    Point IGUpperLeft = new Point(-1024.1024); 
    UpperLeft = &IGUpperLeft; 

    ... 
} 

int main (int argc, char ** argv) 
{ 
    if (!InitializeGame()) 
     Die("Initialization Failure"); 
    WriteHighScore(UpperLeft); 
} 

[nicht wirklich relevant, ABER KANN helfen, das Problem VERSTÄNDNIS]

[Point.cpp]

Point::Point() { 
    x = 0; 
    y = 0; 
} 

Point::Point(int nx, int ny) { 
    x = nx; 
    y = ny; 
    strcpy(text,0); //0 should have been set by another global static object 
} 

[Point.h]

#ifndef POINT_H 
#define POINT_H 
class Point { 
    public: 
     Point(); 
     Point(int nx, int ny); 
     int getX(); 
     int getY(); 
     int getText(*pcbuff); 
    private: 
     int x; 
     int y; 
     char text[2]; 
}; 
#endif 

Antwort

4

Eine Möglichkeit, die Instanziierung von statische Objekte zu verwenden ist Konstrukt bei der ersten Verwendung Idiom wie in diesem FAQ

+0

Was eine hervorragende Referenz! – ojblass

Verwandte Themen