单件模式是设计模式中的一种,保证每一个类仅有一个实例。
利用访问限定static成员,可以实现单件模式。
直接上代码:
#include<iostream>
using namespace std;
class Singleton
{
private:
static int m_ObjectNum; //计算实例化对象数量
static Singleton* m_Singleton;
Singleton(){ m_ObjectNum++; }
Singleton(const Singleton& single){} //防止构造函数的复制
public:
virtual ~Singleton(){ m_ObjectNum--; }
static Singleton* getSingletonPtr();
static Singleton& getSingleton();
int getObjectNum() const{ return m_ObjectNum; }
};
int Singleton::m_ObjectNum = 0;
Singleton* Singleton::m_Singleton = 0;
Singleton* Singleton::getSingletonPtr()
{
if (!m_Singleton)
{
m_Singleton = new Singleton;
}
return m_Singleton;
}
Singleton& Singleton::getSingleton()
{
if (!m_Singleton)
{
m_Singleton = new Singleton;
}
return (*m_Singleton);
}
int main(char argc, char* argv[])
{
cout<<Singleton::getSingleton().getObjectNum()<<endl;
cout << Singleton::getSingletonPtr()->getObjectNum() << endl;
Singleton single; //error,不能在类外实例化对象
getchar();
return 0;
}
输出结果为:
1
1