一:第一种实现。最直接的实现。
#include <memory>
class CSingletonClass
{
friend class std::auto_ptr<CSingletonClass>; //才能delete CSingletonClass
public :
static CSingletonClass* GetInstance()
{
if (NULL == m_apInstance.get())
{
m_apInstance.reset(new CSingletonClass());
}
return m_apInstance.get();
}
protected:
static std::auto_ptr<CSingletonClass> m_apInstance;
private:
CSingletonClass(){} //阻止生成实例
~CSingletonClass(){} //防止删除获得的实例,然后再生成新实例
CSingletonClass(const CSingletonClass &); //防止复制对象,其实没什么用
CSingletonClass& operator = (const CSingletonClass &); //防止赋值,跟复制一样没什么用,因为构造函数一夫当关。但可以阻止自己赋值给自己
};
std::auto_ptr<CSingletonClass> CSingletonClass::m_apInstance; //初始化静态成员
int _tmain(int argc, _TCHAR* argv[])
{
CSingletonClass* pSingleton = CSingletonClass::GetInstance();
//以下不能通过编译
//CSingletonClass singleton;
//CSingletonClass singletonCopyCtor(*pSingleton);
//*pSingleton = *pSingleton;
return 0;
}
第二种实现:使用工厂方法,进行单例的创建,工厂方法负责创建、销毁实例。
class CSingleton
{
friend class CSingletonFactory; //提供创建CSingleton实例的通道
public:
void print()
{
std::cout<<"Singleton Instance"<<std::endl;
}
//其它一些成员。
//阻止外面创建
private:
CSingleton(){}
~CSingleton(){}
CSingleton(const CSingleton &);
CSingleton& operator = (const CSingleton &);
};
class CSingletonFactory
{
public:
static CSingleton* GetInstance()
{
return &m_instance;
}
protected:
static CSingleton m_instance;
};
CSingleton CSingletonFactory::m_instance;
本文介绍了单例模式的两种实现方式:一种是通过 std::auto_ptr 来管理单例对象的生命周期;另一种是通过工厂方法来创建和管理单例对象。这两种方法都能有效地确保在整个应用中只存在一个实例。
172

被折叠的 条评论
为什么被折叠?



