一个单例类:
class Singleton { private: Singleton(); virtual ~Singleton(); static Singleton* instance; public: static Singleton* GetInstance(); };
Singleton* Singleton::instance=NULL; Singleton* Singleton::GetInstance() { if(instance == NULL) { instance = new Singleton(); } return instance; }1、构造方法私有 那么,就意味着,只能在Singleton的成员函数中,才能调用Singleton的构造函数来创建实例。在Singleton之外,不能创建Singleton对象的实例。 2、代码中,定义了GetInstance方法,只能通过GetInstance方法来获取Singleton对象的实例,单例就是在GetInstance方法中控制的。 首先,Singleton有一个 static Singleton* instance;//惟一实例 Singleton* Singleton::instance=NULL; 在这里初始化为NULL。 Singleton* Singleton::GetInstance() { if(instance == NULL) { instance = new Singleton(); } return instance; } 上面的函数,就是通过instance来实现单例的。 当第一次调用GetInstance时,instance 为NULL,所以会执行 instance = new Singleton(); 把这个新建的实例保存到静态成员instance,并返回这个指针。 第二次到第N次调用GetInstance时,由于instance不为空,所以会直接返回instance 。也就是第一次调用GetInstance创建的那个实例。 所以这样就实现了,单实例。 意思就是说,Singleton对象的实例,只会被创建一次,就是说内存中,只存在一个Singleton的实例,就是所谓,单实例。