#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
答案 0 :(得分:1)
Singleton* Singleton::instance = 0;`
是声明,而不是定义。
在其类定义中声明的非嵌入式静态数据成员不是定义...
因此,没有下面的代码行,
instance
在代码中未定义 getInstance
。并且尝试在android:textStyle="bold|italic"
中使用它会导致未定义的引用错误。
答案 1 :(得分:0)
除了在C ++中初始化静态成员的过程之外,将单例初始化为null的唯一原因是因为出于某种原因(例如,等待分配其他资源和/或已初始化)。否则,可以在静态声明期间将其初始化。此外,您无需处理指针即可创建Singleton。
class Singleton
{
public:
static Singleton & getInstance();
private:
Singleton(){}
static Singleton instance;
};
Singleton Singleton::instance;
Singleton & Singleton::getInstance()
{
return instance;
}
编辑:没关系,我看到您的问题是针对静态初始化过程而不是模式本身