国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 單例模式的詳解及實例

2020-01-26 14:00:04
字體:
來源:轉載
供稿:網友

C++ 單例模式的詳解及實例

1.什么叫單例模式?

單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。有很多地方需要這樣的功能模塊,如系統的日志輸出,GUI應用必須是單鼠標,MODEM的聯接需要一條且只需要一條電話線,操作系統只能有一個窗口管理器,一臺PC連一個鍵盤。
通過單例模式, 可以做到:

(1)確保一個類只有一個實例被建立
(2)提供了一個對對象的全局訪問指針
(3)在不影響單例類的客戶端的情況下允許將來有多個實例

2.怎樣實現單例模式

一個簡單的單例模式該怎樣去實現:構造函數聲明為private或protect防止被外部函數實例化,內部保存一個private static的類指針保存唯一的實例,實例的動作由一個public的類方法代勞,該方法也返回單例類唯一的實例。

3.具體實現

(1)最簡單的單例模式(懶漢模式)

懶漢模式:懶漢式的特點是延遲加載,比如配置文件,采用懶漢式的方法,顧名思義,懶漢么,很懶的,配置文件的實例直到用到的時候才會加載。

class SiglenTon{public:  static SiglenTon *GetInstence()  {    if( p == NULL)    {      p = new SiglenTon();    }    return p;  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};SiglenTon *SiglenTon::p = NULL;int main(){  SiglenTon *p = SiglenTon::GetInstence();  return 0;}

(2)第一種方式沒有考慮到線程安全

class SiglenTon //(線程安全的餓漢模式){public:  static SiglenTon *GetInstence()  {    cout<<"static SiglenTon *GetInstence()"<<endl;    pthread_mutex_lock(&mutex);    if( p == NULL)    {      pthread_mutex_lock(&mutex);      p = new SiglenTon();      pthread_mutex_unlock(&mutex);    }    pthread_mutex_unlock(&mutex);    return p;  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};SiglenTon *SiglenTon::p = NULL;int main(){  SiglenTon *p = SiglenTon::GetInstence();  SiglenTon *p1 = p->GetInstence();  return 0;}

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

class SiglenTon{public:  SiglenTon *GetInstence()  {    if( p == NULL)    {      return p;    }  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};

以上就是對C++ 中單例模式的講解,如有疑問請留言或者到本站社區進行交流討論,感謝閱讀,希望幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉禾县| 上思县| 宽城| 临西县| 江华| 广元市| 甘肃省| 武鸣县| 定安县| 禹城市| 普陀区| 永和县| 安西县| 绥德县| 通山县| 于田县| 平和县| 乌鲁木齐县| 襄城县| 武安市| 从化市| 尼勒克县| 莱州市| 左贡县| 宁蒗| 闵行区| 安图县| 锡林浩特市| 基隆市| 景谷| 措勤县| 观塘区| 华蓥市| 梧州市| 乐山市| 灌阳县| 兴和县| 深水埗区| 罗山县| 元朗区| 姜堰市|