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;
  • 相关阅读:
    fiber
    ACM用到的算法。先做个笔记,记一下
    matlab安装及破解
    银行家算法
    网络安全(超级详细)零基础带你一步一步走进缓冲区溢出漏洞和shellcode编写!
    心脏滴血漏洞复现(CVE-2014-0160)
    KMP算法分析
    利用BURPSUITE检测CSRF漏洞
    BURPSUITE爆破密码
    动态规划—最长回文子串LEETCODE第5题深度剖析
  • 原文地址:https://www.cnblogs.com/zhangtiezi/p/8526331.html
Copyright © 2011-2022 走看看