单例

来源:互联网 发布:mac搜索文件快捷键 编辑:程序博客网 时间:2024/04/30 15:05

一个单例类:

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的实例,就是所谓,单实例。

原创粉丝点击