C++单例类的实现方法

来源:互联网 发布:网络歌手排行榜2009 编辑:程序博客网 时间:2024/05/05 23:24

这是一个C++单例类的实现方法。





#include "stdafx.h"#include <iostream>    using namespace std;    //单例类的C++实现    class Singleton    {    private:    Singleton();//注意:构造方法私有       static Singleton* instance;//惟一实例    int var;//成员变量(用于测试)    public:    static Singleton* GetInstance();//工厂方法(用来获得实例)    int getVar();//获得var的值      };   //构造方法实现    Singleton::Singleton()    {    this->var = 20;    cout<<"Singleton Constructor"<<endl;    }    //初始化静态成员    Singleton* Singleton::instance=new Singleton();    //这条等于这个new Singleton(),//是因为有这个this->var,this是本类的对象Singleton* Singleton::GetInstance()      {    return instance;    }       int Singleton::getVar()    {    return this->var;    }    //main    int main(int argc, char* argv[])    {    Singleton *ton1 = Singleton::GetInstance();       cout<<"ton1 var = "<<ton1->getVar()<<endl;    system("pause");return 0;    }







与上面的程序相比,下面的程序增加了保护性。

/*C++单例模式的实现*/  #include "stdafx.h"#include <iostream>  using namespace std;  class Singleton  {  public:  static Singleton* getInstance();//一个类方法,返回Single类型指针  void setValue(int);  int getValue();  ~Singleton();  private:  Singleton();//构造函数私有  static Singleton* instance;//唯一一个实例  int value;  };  Singleton* Singleton::instance=NULL;//必须类外定义初值NULL  Singleton* Singleton::getInstance()  {  if (NULL==instance)  {  instance=new Singleton();  }  return instance;  }  Singleton::Singleton()  {  this->value=100;  cout<<"Singleton Constructor!!!"<<endl;  }  Singleton::~Singleton()  {  cout<<"Singleton Destructor!!!"<<endl;  }  int Singleton::getValue()  {   return this->value;  }  void Singleton::setValue(int v)  {  value=v;  }  //测试程序  int main()  {  Singleton* s1=Singleton::getInstance();  Singleton* s2=Singleton::getInstance();  if(s1==s2)  cout<<"s1,s2相等,并指向唯一一个单例实例"<<endl;  cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;    cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;  s1->setValue(200);  cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;   cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;  delete Singleton::getInstance();  system("pause");return 0;  }  



0 0
原创粉丝点击