zoukankan      html  css  js  c++  java
  • 设计模式(一):单例模式

     1 #include <iostream>
     2 using namespace std;
     3 
     4 /************************************************************************/
     5 /*Lazy Singletom(非线程安全)                                            */
     6 /************************************************************************/
     7 class singleton
     8 {
     9 public:
    10     static singleton& Instance()
    11     {
    12         if (ps == NULL)
    13         {
    14             ps = new singleton;
    15         }
    16         return *ps;
    17     }
    18 private:
    19     singleton();
    20     singleton(const singleton&);
    21     ~singleton();
    22     static singleton* ps;
    23 };
    24 singleton*singleton::ps = NULL;
    25 
    26 /************************************************************************/
    27 /* Eager singleton(线程安全)                                              */
    28 /* 函数外的staic对象在不同编译单元初始化顺序不固定,两个线程交互会产生问题*/
    29 /************************************************************************/
    30 class singleton
    31 {
    32 public:
    33     static singleton& Instance()
    34     {
    35         return instance;
    36     }
    37 private:
    38     singleton();
    39     singleton(const singleton&);
    40     ~singleton();
    41     static singleton instance;
    42 };
    43 singleton singleton::instance;
    44 
    45 /************************************************************************/
    46 /* Meyes singleton  C++11后为线程安全                                   */
    47 /************************************************************************/
    48 class singleton
    49 {
    50 public:
    51     static singleton& Instance()
    52     {
    53         return static singleton instance;
    54     }
    55 private:
    56     singleton();
    57     singleton(const singleton&);
    58     ~singleton();
    59 };
    60 
    61 /************************************************************************/
    62 /* Double_lock        基于线程安全的懒加载                                */
    63 /************************************************************************/
    64 class singleton
    65 {
    66 public:
    67     static singleton& Instance()
    68     {
    69         if (ps == NULL)
    70         {
    71             lock();
    72             if (ps == NULL)
    73             {
    74                 ps = new singleton;
    75             }
    76             unlock();
    77         }
    78         return *ps;
    79     }
    80 private:
    81     singleton();
    82     ~singleton();
    83     singleton(const singleton&);
    84     static singleton* ps;
    85 };
    86 singleton* singleton::ps = NULL;
  • 相关阅读:
    寒假学习报告05
    寒假学习报告04
    微信推送信息,支付宝支付接口
    Vue组件生成依赖文件,contentype
    redis之列表字典操作
    drf版本控制redis基础
    drf分页器,url控制器,解析器,响应器
    drf认证权限频率
    drf视图认证组件
    drf序列化组件
  • 原文地址:https://www.cnblogs.com/zhangtiezi/p/8526331.html
Copyright © 2011-2022 走看看