【发布时间】:2019-06-14 13:42:54
【问题描述】:
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton *getInstance();
private:
Singleton(){}
static Singleton* instance;
};
Singleton* Singleton::instance = 0;
Singleton* Singleton::getInstance()
{
if(!instance) {
instance = new Singleton();
cout << "getInstance(): First instance\n";
return instance;
}
else {
cout << "getInstance(): previous instance\n";
return instance;
}
}
int main()
{
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
return 0;
}
我不明白为什么单例实例变量应该在下一行中用 0 初始化。 Singleton* Singleton::instance = 0; 因为当我忘记初始化实例时,我得到了错误
singleton.cpp:(.text+0xc): undefined reference to `Singleton::instance'
singleton.cpp:(.text+0x2d): undefined reference to `Singleton::instance'
singleton.cpp:(.text+0x43): undefined reference to `Singleton::instance'
singleton.cpp:(.text+0x5b): undefined reference to `Singleton::instance'
collect2: error: ld returned 1 exit status
【问题讨论】:
-
因为这是 C++ 的规则。
static Singleton* instance;是一个声明,但变量也必须定义,Singleton* Singleton::instance = 0;是一个定义。