我在C++库中遇到以下结构:

在myClass.h中

class myClass {
public:
static myClass* Instance();
.
.
private:
static myClass* _instance;
.
.
};

并在myClass.cpp中
myClass* myClass::_instance = NULL;

// followed by the all other functions..

myClass::myClass() {
    .
    .
}

myClass* myClass::Instance() {
    if (_instance == NULL) {
        .
        .
    }
    .
    .
}

那么,使_instance作为任何函数之外的NULL指针有什么用?而这行代码何时执行?

谢谢。

编辑:
添加主要功能。而myClass.cpp中的实例函数则检查指针的值。仍然不知道何时将指针设置为NULL。
int _tmain(int argc, T_CHAR* argv[]) {

myClass* instance = myClass::Instance();

.
.
.

return 0;
}

最佳答案



通常必须在一个包含源类的 namespace 中的一个源文件中定义静态数据成员。它们受“一个定义规则”的约束,因此在使用它们的任何程序中都必须有一个确切的定义。这就是定义。

使用NULL对其进行初始化可确保其最初为null,以便Instance()函数可以确定是否已创建该实例。由于与所有静态变量一样,无论您是否明确提供初始化程序,它都将被零初始化,因此这并不是严格必要的。



在静态初始化期间,在程序中的任何其他代码之前;因为它是带有常量初始化程序的普通类型。

10-08 06:41
查看更多