zoukankan      html  css  js  c++  java
  • boost的单例模式

    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的代码还是很好玩的,能学到不少模版的技巧,模版的奇淫巧技不一定会用,但至少得能看懂,毕竟很多开源库都有模版的实现。
  • 相关阅读:
    linq中的AsEnumerable()方法
    c# 一个匿名对象中包含多个子对象的处理方式
    jenkins的安装与启动
    牛客网-2018年湘潭大学程序设计竞赛-F
    poj-1149(最大流)
    hdu-2255(带权二分图)
    bzoj-1191(二分图最大匹配)
    codevs2822
    hdu 5652(并查集)
    hdu—3861(tarjan+二分图)
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5711992.html
Copyright © 2011-2022 走看看