标签:blog http 使用 ar strong 文件 div art sp
使用单件模式的意图是保证一个类只有一个实例,并提供一个访问它的全局访问点。单件实例的示例代码:
Singleton模式具有许多优点:
1)对唯一实例的受控访问。Singleton类封装它的唯一实例,可以严格控制客户怎样及何时访问它。
2)缩小命名空间。Singleton模式是对全局变量的一种改进,避免了那些存储唯一实例的全局变量污染命名空间。
3)允许对操作和表示的精华。Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用所需要的类的实例在运行时刻配置应用。
4)允许可变数目的实例。允许Singleton类的多个实例,可以用相同的方法来控制应用所使用的实例数目,只有允许访问Singleton实例的操作需要改变。
5)比类操作更灵活。
下面考虑多线程情况下的Singleton。
多线程时,在if(m_pInstance == NULL)这句,可能会有多个线程进入,从而导致了多个实例的创建,也造成了内存的泄露。所以应该加上线程间的互斥操作。
多线程单件模式示例代码:
这里用双检查,只有在第一次创建的时候才会去考虑互斥,以提高效率。
上面的代码还有一个问题,m_pInstance所指向的空间什么时候释放呢, 怎么样完成实例的析构操作。如果类析构行为中有关闭文件,释放资源等操作,那么我们的代码必须在合适的时机正常的析构该实例。
下面给出解决该问题的一个方法:
另外还有一种方法,但是该方法处理线程安全问题比较复杂,这里暂不考虑线程安全,只考虑析构问题:
(未考虑线程安全):
标签:blog http 使用 ar strong 文件 div art sp
原文地址:http://blog.csdn.net/yusiguyuan/article/details/39324741