我有一个由于bug而崩溃的C ++程序。它甚至不会到达main,因为在其静态全局对象的一个构造函数中访问了一个NULL指针。更糟糕的是,指针是NULL,但应该由另一个全局静态变量设置。我想我可以将这些全局变量包装在一个设置对象全局指针的函数中。我知道需要重新设计全局变量。我也知道全局静态对象的顺序是未知的。我仍然很好奇 - 有一个很好的接受方法来控制静态全局对象初始化的顺序吗?
简化示例(删除错误检查记录等)
[game.cpp]
Point UpperLeft(-1024.1024); //Global Evilness
int InitializeGobals()
{
...
}
int main (int argc, char ** argv)
{
if (!InitializeGame())
Die("Initialization Failure");
WriteHighScore(UpperLeft);
}
我想使用以下命令指定所有静态对象:
[prposedgame.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);
}
[并非真正相关但可能有助于理解问题]
[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