设计模式 - C++单例模式应用

单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。

定义如下:

class CSingleton {
private: //构造函数是私有的
	CSingleton();
	static CSingleton *m_pInstance;
public:
	static CSingleton *instance()
	{
		if(m_pInstance == NULL)
		{
			m_pInstance = new CSingleton();
			return m_pInstance;
		}
	}
}

用户访问唯一实例的方法只有instance(),如果不通过这个函数,任何创建实例的尝试都将失败,因为类的构造函数是私有的。 



来看看其他做法:

class CSingleton: {
private:
    CSingleton();

public:
    static CSingleton& instance();
    void func() { cout << "hello" << endl; }

}



CSingleton& CSingleton::instance()
{
    static CSingleton obj;
    return obj;
}

//全局函数
inline CSingleton& iseApp() { return CSingleton::instance(); }


 

int main()

{

   iseApp().func();

}


使用局部静态变量,非常强大的方法,完全实现了单例的特性,而且代码量更少,也不用担心单例销毁的问题
 


另外补充一点:

boost::noncopyable 主要用于单例的情况.
通常情况下, 要写一个单例类就要在类的声明把它们的构造函数赋值函数析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值