• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
代码的天空
博客园    首页    新随笔    联系   管理    订阅  订阅

C++两种编写单件模式方法对比

1.第一种:

 1 template <typename T>
 2 class CSingletonT
 3 {
 4 public:
 5 
 6     virtual ~CSingletonT(){}
 7 
 8 protected:
 9 
10     CSingletonT(){}
11 
12 public:
13 
14     static T &Instance()
15     {
16         static T instance;
17         return instance;
18     } 
19 };

2.第二种:

 1 class CSingletonObject
 2 {
 3 public:
 4 
 5     static T &Instance()
 6     {
 7         return s_object;
 8     }
 9 
10     virtual ~CSingletonObject(){}
11 
12 protected:
13 
14     CSingletonObject(){}
15     
16 private:
17 
18     static CSingletonObject s_object;
19 }
20 
21 CSingletonObject CSingletonObject::s_object;

3.两种编写方式其实对程序有着比较重要的影响,第一种是在调用该类的Instance方法后,对象才被创建出来,而第二种,是程序启动后,就直接创建出来。
4.第一种单件模式在多线程(之前没有被任何单线程调用过)调用的时候,会发生内存错误问题,原因在因都在调用Instance方法时,第一次调用会创建内存,而有可能在对象没有完全创建完成时,第二次调用Instance方法已经开始并且到了 return instance; 的步骤,所以在使用对象方法数据成员时就会出现内存异常。
5.第一种单件编写方案比较合适需要初始化的对象(容易编写,继承一个类即可);第二种单件编写方案使用性更广,无过多限制(只能手动编写,无捷径)。

posted @ 2011-03-15 15:02  黑翼  阅读(625)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3