template <typename T>
struct singleton_default
{
  private:
    struct object_creator
    {
      object_creator() { singleton_default<T>::instance(); }
      inline void do_nothing() const { }
    };
    static object_creator create_object;
    singleton_default();
  public:
    typedef T object_type;
    static object_type & instance()
    {
      static object_type obj;
      create_object.do_nothing();
      return obj;
    }
};
template <typename T>
typename singleton_default<T>::object_creator
singleton_default<T>::create_object;
boost的单例模版是一个线程安全的版本,单例的初始化被确保在main函数之前进行
1.create_object是static成员变量,因此create_object会在main函数之前完成初始化
2.create_object是static的成员变量,给出一个通用的声明
3.create_object的构造函数包含了singleton_default<T>::instance()
4.singleton_default<T>::instance()包含一个T类型的静态成员,如果singleton_default<T>::instance()被调用,obj将被静态的构造
5.模版具有延迟实现机制,只是声明create_object而不调用create_object的方法是不会真正实例化的,所以有了create_object.do_nothing(),确保create_object被实例化
研究一下boost的代码还是很好玩的,能学到不少模版的技巧,模版的奇淫巧技不一定会用,但至少得能看懂,毕竟很多开源库都有模版的实现。

boost的单例模式的更多相关文章

  1. C++多线程下的单例模式

    一.懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例. 需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread s ...

  2. C++设计模式——单例模式

    问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进 ...

  3. (七)boost库之单例类

    (七)boost库之单例类 一.boost.serialzation的单件实现 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一 ...

  4. C++设计模式——单例模式(转)

    问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进 ...

  5. (原创)c++11改进我们的模式之改进单例模式

    我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...

  6. Singleton - 单例模式和Double-Checked Locking - 双重检查锁定模式

    问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进 ...

  7. C++模式设计-多线程下的单例模式

    1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实 ...

  8. Qt实现简单的单例模式

    单例模式十分的常见也很常用,Boost库中就有单例的泛型实现,Qt中,可以利用原子指针来实现一个单例模式: class SingleTon{ public: static SingleTon & ...

  9. c++设计模式系列----单例模式(Singleton模式

    单例模式是为了解决唯一对象实例问题而提出来的,许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单 ...

随机推荐

  1. Java设计模式之 — 策略(Strategy)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8986285 今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急 ...

  2. IT培训机构的招生诈骗大曝光

    作者曾在某知名IT培训机构工作过,目睹了招生欺诈,后来作者果断辞职,不能为奸商工作,助纣为虐,在此曝光,以免学生的血汗钱白交.社会上的IT培训机构手法大都一样,奸商都是有套路的.X大青鸟,X内外企IT ...

  3. EXTJS之DATA PROXY READER

    这是不依赖于STORE的读取.我测试了很久,原来在新版本的EXTJS里.modelmanager.getmodel之类的不用了. 更改为静态的LOAD办法. <!DOCTYPE html> ...

  4. asp.net--webconfg指南

    原文链接 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. ...

  5. 开源分布式MySQL中间件探究与应用 dba+

  6. HDU 5046

    同样是二分+DLX即可. #include <iostream> #include <cstdio> #include <cstring> #include < ...

  7. Anaconda安装第三方模块

    Anaconda安装第三方模块 普通安装: 进去\Anaconda\Scripts目录,conda install 模块名 源码安装: 进去第三方模块目录,python install setup.p ...

  8. 【Cocos2dx】资源目录,播放背景音乐,导入外部库

    在Cocos2dx中播放背景音乐是一件非常easy的事情,就一行代码,可是首先要导入Cocos2dx的音频引擎cocosDenshion. cocosDenshion对cocos2dproject提供 ...

  9. Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor 线段树模拟

    E. Correct Bracket Sequence Editor   Recently Polycarp started to develop a text editor that works o ...

  10. 安装eclipse maven插件m2eclipse No repository found containing

    m2eclipse插件是Eclipse的一款Maven插件. 安装m2eclipse插件的步骤例如以下: 启动Eclipse,在菜单条中选择Help,然后选择Install New Software- ...