最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn) 單例模式實例詳解

 更新時間:2017年05月06日 14:39:54   投稿:lqh  
這篇文章主要介紹了C++實現(xiàn) 單例模式實例詳解的相關資料,需要的朋友可以參考下

設計模式之單例模式C++實現(xiàn)

一、經典實現(xiàn)(非線程安全)

class Singleton 
{ 
  public: 
    static Singleton* getInstance(); 
  protected: 
    Singleton(){} 
  private: 
    static Singleton *p; 
}; 
 
Singleton* Singleton::p = NULL; 
Singleton* Singleton::getInstance() 
{ 
  if (NULL == p) 
    p = new Singleton(); 
  return p; 
} 

二、懶漢模式與餓漢模式

懶漢:故名思義,不到萬不得已就不會去實例化類,也就是說在第一次用到類實例的時候才會去實例化,所以上邊的經典方法被歸為懶漢實現(xiàn);

餓漢:餓了肯定要饑不擇食。所以在單例類定義的時候就進行實例化。

特點與選擇

由于要進行線程同步,所以在訪問量比較大,或者可能訪問的線程比較多時,采用餓漢實現(xiàn),可以實現(xiàn)更好的性能。這是以空間換時間。在訪問量較小時,采用懶漢實現(xiàn)。這是以時間換空間。

線程安全的懶漢模式

1.加鎖實現(xiàn)線程安全的懶漢模式

class Singleton 
{ 
  public: 
    static pthread_mutex_t mutex; 
    static Singleton* getInstance(); 
  protected: 
    Singleton() 
    { 
      pthread_mutex_init(&mutex); 
    } 
  private: 
    static Singleton* p; 
}; 
 
pthread_mutex_t Singleton::mutex; 
Singleton* Singleton::p = NULL; 
Singleton* Singleton::getInstance() 
{ 
  if (NULL == p) 
  { 
    pthread_mutex_lock(&mutex); 
    if (NULL == p) 
      p = new Singleton(); 
    pthread_mutex_unlock(&mutex); 
  } 
  return p; 
}

2.內部靜態(tài)變量實現(xiàn)懶漢模式

class Singleton 
{ 
  public: 
  static pthread_mutex_t mutex; 
  static Singleton* getInstance(); 
  protected: 
    Singleton() 
    { 
      pthread_mutex_init(&mutex); 
    } 
}; 
 
pthread_mutex_t Singleton::mutex; 
Singleton* Singleton::getInstance() 
{ 
  pthread_mutex_lock(&mutex); 
  static singleton obj; 
  pthread_mutex_unlock(&mutex); 
  return &obj; 
} 


餓漢模式(本身就線程安全)

class Singleton 
{ 
  public: 
    static Singleton* getInstance(); 
  protected: 
    Singleton(){} 
  private: 
    static Singleton* p; 
}; 
 
Singleton* Singleton::p = new Singleton; 
Singleton* Singleton::getInstance() 
{ 
  return p; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C語言可變參數(shù)函數(shù)詳解

    C語言可變參數(shù)函數(shù)詳解

    在某些情況下我們希望函數(shù)的參數(shù)個數(shù)可以根據需要確定,因此c語言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開始講解
    2021-08-08
  • VC++獲得當前進程運行目錄的方法

    VC++獲得當前進程運行目錄的方法

    這篇文章主要介紹了VC++獲得當前進程運行目錄的方法,可通過系統(tǒng)函數(shù)實現(xiàn)該功能,是非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C語言實現(xiàn)二叉樹鏈式結構的示例詳解

    C語言實現(xiàn)二叉樹鏈式結構的示例詳解

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)二叉樹鏈式結構的相關資料,文中的示例代碼講解詳細,對我們學習C語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • C語言深入分析函數(shù)與宏的使用

    C語言深入分析函數(shù)與宏的使用

    C語言函數(shù)是一種函數(shù),用來編譯C語言,一般包括字符庫函數(shù),數(shù)學函數(shù),目錄函數(shù),進程函數(shù),診斷函數(shù),操作函數(shù)等,宏在C語言中是一段有名稱的代碼片段。無論何時使用到這個宏的時候,宏的內容都會被這段代碼替換掉
    2022-04-04
  • C++變位詞問題分析

    C++變位詞問題分析

    這篇文章主要介紹了C++變位詞問題分析,非常經典的算法,對于進行C++下的算法設計有很大的啟發(fā)性,需要的朋友可以參考下
    2014-08-08
  • C++ 成員變量的初始化順序問題詳解

    C++ 成員變量的初始化順序問題詳解

    這篇文章主要介紹了C++ 成員變量的初始化順序問題詳解的相關資料,需要的朋友可以參考下
    2017-02-02
  • C語言中.與->的用法介紹

    C語言中.與->的用法介紹

    結構體用點,結構體指針用箭頭,簡單的說,就是一個快捷方式,一個語法糖,這篇文章主要介紹了C語言中.與->的區(qū)別及用法,需要的朋友可以參考下
    2023-05-05
  • 詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法

    詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法

    這篇文章主要介紹了詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C語言函數(shù)調用底層實現(xiàn)原理分析

    C語言函數(shù)調用底層實現(xiàn)原理分析

    這篇文章主要介紹了C語言函數(shù)調用底層實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++的四種類型轉換

    C++的四種類型轉換

    這篇文章主要介紹了C++的四種類型轉換,有詳細的示例代碼展示,對于學習C++的同學有一定的參考價值,感興趣的同學可以參考本文
    2023-04-04

最新評論

青海省| 崇仁县| 循化| 白沙| 五原县| 射阳县| 绍兴县| 东丰县| 隆德县| 绿春县| 韶山市| 南江县| 忻州市| 托里县| 罗田县| 正镶白旗| 嫩江县| 深州市| 琼海市| 新昌县| 元谋县| 铜山县| 广南县| 扎鲁特旗| 叶城县| 泸西县| 调兵山市| 赤水市| 乐亭县| 登封市| 禄丰县| 巴彦淖尔市| 铜山县| 罗山县| 博乐市| 探索| 二连浩特市| 富民县| 乌兰察布市| 囊谦县| 府谷县|