C++实现Singleton(单例)模式

2017-04-30 15:56 阅读 487 次 评论 0 条

Singleton模式作为设计模式中用途较为广泛的一种模式,它在对象程序设计中起着举足轻重的作用,今年来深受面试官的青睐,单例模式从此浮上水面。今天就单例模式的几种解决方法与大家分享。

设计一个类,我们只生成该类的一个实例。

只适用于单线程环境

既然要求仅生成一个实例,我们可以将构造函数私有定义,防止他人用于创建实例。其次,我们需要定义一个静态成员变量,使得类外可以使用类的作用界定符来创建对象。

上述代码可以看出,在创建s1对象时,instance为NULL,即创建对象成功,当再次创建s3时,instance不为NULL,也就不会再创建实例,因此实例在类中仅有一份,被类的成员所共享。s2无法创建对象是因为构造函数为私有定义,无法调用。

但是这样带来的弊端就是至多只能创建一个实例,即只能处理单线程的工作。

可以处理多线程环境

鉴于上述代码仅能处理单线程工作,因此我们可以设想:在实例还未创建之前需要加锁操作,以保证只有一个线程创建出实例。而当实例已经创建之后,就不再需要加锁操作。

Singleton用加锁机制来确保多线程下只创建一个实例,并且用两个if判断来提高效率。使用所谓的双检锁机制,因为进行一次加锁和解锁是需要付出对应的代价的,而进行的两次判断,就可以避免多次加锁与解锁的操作,同时也保证了线程的安全性。

但是这种实现方法当遇到大数据时,加锁将成为一个性能的瓶颈,这样实现起来也就相对麻烦了。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:C++实现Singleton(单例)模式 | 术与道的分享
分类:编程素养 标签:,
1024do.com导航_术与道导航平台

发表评论


表情