设计模式学习笔记-Singleton

这个应该是比较简单的一个设计模式,也是我接触的第一个模式。要点是构造函数声明为私有,定义一个指向自己的静态指针,在合适的时候new一个对象。简单的代码如下:

   1: class Singleton {
   2: public:
   3:     static Singleton* instance()
   4:     {
   5:         if (_instance == NULL) 
   6:         {
   7:             _instance = new Singleton;
   8:         }
   9:         return _instance;
  10:     }
  11: private:
  12:     Singleton(){}
  13:     ~Singleton(){}
  14:  
  15: private:
  16:     static Singleton* _instance;
  17: };
  18:  
  19: Singleton* Singleton::_instance = NULL;

仅仅是练习一下而已,没有实际的用处。实际代码中必须要有其他的成员变量和函数才能发挥功能。

首先一个问题是上面的代码线程不安全。static的东西,在多线程访问并“创建”的时候必须要加锁保护一下才行。一般用“双重锁定检查”来做,这里省略。

另外一个问题是如何释放资源。如果把析构函数设置为私有的,就不能显示去delete。如果设置为公共的,封装性又不太好,毕竟不应该谁都能删除一个公共的资源。一种建议的做法是再搞另一个对象来管理单体,在合适的时候让那个对象来删除单体资源,这里要用到友元类。单体一般生命周期都很长,很多代码几乎都不删除单体。

最后一个问题是单体可以用模板来自动生成,ACE就有这样的模板来生成单体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值