今天复习设计模式的时候,自己动手写个个小的Singleton模式的简单实现,如下:
class Singleton
{
private:
static Singleton* mInstance;
Singleton();
public:
static Singleton* getInstance();
};
Singleton::Singleton() {}
Singleton* Singleton::getInstance()
{
if(NULL==mInstance)
{
mInstance = new Singleton;
}
return mInstance;
}
编译一下,发现编译可以通过。但是链接程序的时候曝出错误:无法解析的外部符号 mInstance
后来查了一下才发现,对于静态的成员指针必须先做初始化:
Singleton* Singleton::mInstance=NULL;
类似C#中的内联初始化。
而且静态成员指针的初始化不能写在构造函数的 初始化列表中。
真是动手编程序的时候能够发现知识的缺口啊。