C++单例模式

什么叫单例模式?

       单例模式也称为单件模式、单例模式约束了类的实例化,只允许类创建一个对象,也就是类的构造函数外界不可访问;并提供一个访问它的全局访问点,也就是提供了创建对象的接口。 

      

构造函数却是私有的(前面是“ - ”符号),

然后在里面还公开了一个 GetInstance()方法,


单例模式的C++实现:

方法一:

class Singleton  
{
private:  
     Singleton(){}    
     static Singleton* instance;
public: 
     ~Singleton(){} // 因为外界负责delete,所以须注意析构函数访问权限 
      static Singleton*  Instance() {
              if(!instance) // 线程不安全,这里需要同步
                    instance_ = new Singleton; 
              return instance_;
     }
};
 
该方法实现简单,缺点是在多线程的时候可能出现问题,而且该实例的析构函数会在什么时候执行?需要程序员负责在合适的时机销毁。 

一个妥善的方法是让这个类自己知道在合适的时候把自己删除,或者说把删除自己的操作挂在操作系统中的某个合适的点上,使其在恰当的时候被自动执行。

我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量。利用这个特征,我们可以在单例类中定义一个这样的静态成员变量,而它的唯一工作就是在析构函数中删除单例类的实例,如下面的代码中的cleaner类。

class CSingleton
{
private:
	CSingleton()
	{
	}
	static CSingleton *m_pInstance;
	class cleaner   //它的唯一工作就是在析构函数中删除CSingleton的实例
	{
	public:
		~cleaner()
		{
			if(CSingleton::m_pInstance)
				delete CSingleton::m_pInstance;
		}
	};
	static cleaner clr;  //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数
public:
	static CSingleton * GetInstance()
	{
		if(m_pInstance == NULL)  //判断是否第一次调用
			m_pInstance = new CSingleton();
		return m_pInstance;
	}
};<span style="font-size: 16px;">
</span>
类cleaner被定义为CSingleton的 私有内嵌类 ,以防该类被在其他地方滥用。
程序运行结束时,系统会调用CSingleton的静态成员clr的析构函数,该析构函数会删除单例的唯一实例。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值