C++单例

//单例模式。
//为了确保只有一个实例,需要保护它的构造函数,拷贝构造函数以及赋值运算符重载函数,
使其不能被公开调用,故声明为private权限。
//一旦出现误操作,将会直接报错,避免无形中增加实例,
造成不必要的错误。


#include <iostream> using namespace std; class SingleTon { public: ~SingleTon(); static SingleTon* getInstance(); //获得一个实例 void print(); void setSingleTon(const int age); private: SingleTon(); //默认构造函数 SingleTon(const SingleTon& single); //拷贝构造函数 const SingleTon& operator=(const SingleTon& single);//赋值运算符重载函数 int Age; static SingleTon* instance; //唯一实例 }; SingleTon * SingleTon::instance = NULL; SingleTon::SingleTon() { Age = 99; cout << "SingleTon default constructor called !" << endl; } SingleTon::SingleTon(const SingleTon& single) { //cout << "SingleTon copy constructor called !" << endl;//正常情况下,这句话是不能被打印出的。 } const SingleTon& SingleTon::operator=(const SingleTon& single) { return *this; } SingleTon::~SingleTon() { //delete instance;//不能在此delete instance,会造成死循环 cout << "SingleTon destructor called!" << endl; } void SingleTon::setSingleTon(const int age) { Age = age; } SingleTon * SingleTon::getInstance() { if (instance == NULL) //控制单例 { instance = new SingleTon(); //cout << sizeof(*instance) <<endl; } return instance; } void SingleTon::print() { cout << "I wanna live to " << Age << endl; } int main() { SingleTon *s1 = SingleTon::getInstance(); SingleTon *s2 = SingleTon::getInstance(); //不再生成新的实例 s1->print(); s2->print(); cout << endl << endl; s1->setSingleTon(100); s2->print(); //改变的是同一个实例。 s1->print(); cout << endl << endl; s2->setSingleTon(120); s2->print(); s1->print(); delete s1; //调用析构函数,删除单例。 return 0; }

 

posted @ 2013-11-13 20:08  KingDr  阅读(620)  评论(0编辑  收藏  举报