1.对象指针实现;
class Singleton
{
public:
static Singleton* GetInstance()
{
if(NULL == m_pInstance)
{
//Lock();//借用其它类来实现,如boost
if(NULL == m_pInstance)
{
m_pInstance = new Singleton;
}
//UnLock();
}
return m_pInstance;
}
int GetData() const { return m_test; }
private:
Singleton() : m_test(888) {}
class CGarbo
{
public:
CGarbo(){}
~CGarbo()
{
if (Singleton::m_pInstance)
{
delete Singleton::m_pInstance;
}
}
};
static CGarbo m_garbo;
static Singleton* m_pInstance;
int m_test;
};
Singleton::CGarbo Singleton::m_garbo;
Singleton* Singleton::m_pInstance = NULL;
可在main进入前创建对象
Singleton* Singleton::m_pInstance = new Singleton; // 进入main之前创建单例,避免多线程竞争
2.局部静态成员实现
static Singleton* GetInstance()
{
if(NULL == m_pInstance)
{
static Singleton instance;
return &instance;
}
ps: 需定义private的拷贝构造及赋值操作符(不含实现),防止对象拷贝。