singleton C++ 的多种实现

来源:互联网 发布:南宁鸡村网络 编辑:程序博客网 时间:2024/06/04 19:40

一:第一种实现。最直接的实现。

#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;

原创粉丝点击