首页 > 其他 > 详细

创建型模式--单例模式

时间:2014-04-19 22:09:43      阅读:639      评论:0      收藏:0      [点我收藏+]

单例模式:

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

特点:

    1、私有的构造函数

    2、私有的复制构造函数

    3、私有的赋值操作符

问题:

    1、线程安全

    2、数据的清理

代码:

  一个不是线程安全的代码:

bubuko.com,布布扣
 1 class Singleton
 2 {
 3 public:
 4     static Singleton* getInstance()
 5     {
 6 
 7         /**< 假如有两个线程,第一个线程运行时,判断pInstance是否为空,因为此时pInstance
 8          *   ==NULL,那么线程将会进入到if结构体内,假设,就在要执行new Singleton这个操作
 9          *   时,时间片结束,那么此时pInstance还是为NULL,此时另一个线程运行,当它进行判
10          *   断时发现pInstance为空,所以会创建一次,当它执行完后,第一个线程执行,又会产
11          *   生一个新的实例,那么将会产生两个,所以此时是线程不安全的。要想保证安全,必须
12          *   if前面加锁
13          */
14         if(pInstance == NULL)
15         {
16             pInstance = new Singleton;
17         }
18         return pInstance;
19     };
20 private:
21     Singleton(){};
22     Singleton(const Singleton &);
23     Singleton& operator=(const Singleton &);
24 
25     static Singleton *pInstance;
26 };
27 
28 Singleton* Singleton::pInstance = NULL;
bubuko.com,布布扣

而比较常用而且是线程安全的有下面两种方法:

方法一:

bubuko.com,布布扣
 1 class Singleton
 2 {
 3 public:
 4     static Singleton* getInstance()
 5     {
 6         /**< 此函数会在全局区中分配空间,而且在整个程序退出时,清理数据
 7         *   ,所以就不会存在线程不安全的情况
 8         */
 9         static Singleton single;
10         return &single;
11     };
12 private:
13     Singleton(){};
14     Singleton(const Singleton &);
15     Singleton& operator=(const Singleton &);
16 };
bubuko.com,布布扣

方法二:

 

创建型模式--单例模式,布布扣,bubuko.com

创建型模式--单例模式

原文:http://www.cnblogs.com/wang-can/p/3675523.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!