单件类在任何时候最多只有一个实例对象,因此我们必须保证单件类只能被new一次。可以把类的构造函数声明为private,所以new只能出现在类成员函数中。然后在类内部定义一个静态的函数控制引用次数。
#include<iostream>
using std::cout;
using std::endl;
//单件类
class Singleton
{
public :
static Singleton * GetInstance (); //获得实例
static void DestroyObject (); //销毁函数
private :
static Singleton * m_pSingleton ; //静态变量
static int m_iCounter ; //计数器
Singleton ()
{
cout << "Created Singleton Object" << endl ;
};
};
Singleton * Singleton :: m_pSingleton = NULL ;
int Singleton :: m_iCounter = 0;
//获得唯一实例
Singleton * Singleton :: GetInstance ()
{
if ( m_pSingleton == NULL)
{
m_pSingleton = new Singleton ();
}
m_iCounter ++;
cout << "Counter Add: " << m_iCounter << endl ;
return m_pSingleton ;
}
//减少计数器数值,知道为零则销毁唯一实例
void Singleton :: DestroyObject ()
{
m_iCounter --;
cout << "Counter Decrease: " << m_iCounter << endl ;
if (( m_iCounter == 0) && ( m_pSingleton != NULL)) //计数器为零,且静态变量不为空
{
delete m_pSingleton ;
m_pSingleton = NULL ;
cout << "Destroy Singleton Object" << endl ;
}
}