我在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()
函数可以确定是否已创建该实例。由于与所有静态变量一样,无论您是否明确提供初始化程序,它都将被零初始化,因此这并不是严格必要的。
在静态初始化期间,在程序中的任何其他代码之前;因为它是带有常量初始化程序的普通类型。