Singleton模式,类模板,多线程

Singleton模式据说是面试的时候考的最多的一种设计模式,所以这两天认真研究了一下Singleton模式,中间也遇到了一些问题,还好最终都慢慢得以解决

Singleton模式也是单例模式,目的主要是实例化唯一一个对象,有且只有一个,我们当然不可以通过构造函数直接实例化,这样的话对象将不止一个了,所以我们将构造函数声明为private或者protected,同样的道理拷贝构造函数、赋值操作函数也声明为private,既然不可以通过构造函数,那只能通过类直接调用成员函数进而来实例化对象,通过类直接调类调用类成员,这就用到了static,将类直接调用的成员函数声明为static ,返回值为实例化对象。为了保证实例化对象的唯一型,我们每次进行一个判断,判断的成员变量为静态成员变量static。

说了这么多,不如直接贴出来代码:

关于delete实例化的对象,我们可以使用atexit(),具体的代码待会就给贴出来。

如过有很多个类都是只要实例化一个对象,那我们就可以将这个类写成类模板至于多线程,我们需要在实例化之前加锁。大概就是这样,

下面贴出来代码,已经在VS2012下测试通过:


为什么要把类模板中的构造函数声明为protected?程序员在使用模板类时最常犯的错误是将模板类视为某种数据类型。所谓类型参量化(parameterized types)这样的术语导致了这种误解。模板当然不是数据类型,模板就是模板,恰如其名:编译器使用模板,通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation)。从模板类创建得到的类型称之为特例(specialization)。因为classA:public template {},这里要用到继承,所以我们类模板中的构造函数不能私有,必须声明为public或者protected在类A中,我们为了维护类A实例的唯一型,所以我们要将其构造函数声明为protected或者private,这样的话在模板类中Instance中的T* temp = new T;这一句将报错,为什么呢?因为类A中构造函数为protected,我们可以在类A中将template声明为friend,即friend singleton ,这样问题就解决了.参考URL:http://blog.csdn.net/look01/article/details/3228134
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>