欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C++ 單例模式的詳解及實(shí)例

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

C++ 單例模式的詳解及實(shí)例

1.什么叫單例模式?

單例模式也稱(chēng)為單件模式、單子模式,可能是使用最廣泛的設(shè)計(jì)模式。其意圖是保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn),該實(shí)例被所有程序模塊共享。有很多地方需要這樣的功能模塊,如系統(tǒng)的日志輸出,GUI應(yīng)用必須是單鼠標(biāo),MODEM的聯(lián)接需要一條且只需要一條電話(huà)線(xiàn),操作系統(tǒng)只能有一個(gè)窗口管理器,一臺(tái)PC連一個(gè)鍵盤(pán)。
通過(guò)單例模式, 可以做到:

(1)確保一個(gè)類(lèi)只有一個(gè)實(shí)例被建立
(2)提供了一個(gè)對(duì)對(duì)象的全局訪(fǎng)問(wèn)指針
(3)在不影響單例類(lèi)的客戶(hù)端的情況下允許將來(lái)有多個(gè)實(shí)例

2.怎樣實(shí)現(xiàn)單例模式

一個(gè)簡(jiǎn)單的單例模式該怎樣去實(shí)現(xiàn):構(gòu)造函數(shù)聲明為private或protect防止被外部函數(shù)實(shí)例化,內(nèi)部保存一個(gè)private static的類(lèi)指針保存唯一的實(shí)例,實(shí)例的動(dòng)作由一個(gè)public的類(lèi)方法代勞,該方法也返回單例類(lèi)唯一的實(shí)例。

3.具體實(shí)現(xiàn)

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

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

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)第一種方式?jīng)]有考慮到線(xiàn)程安全

class SiglenTon //(線(xiàn)程安全的餓漢模式)
{
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)餓漢模式(餓漢模式本身就是線(xiàn)程安全的)

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

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

上一篇:從C語(yǔ)言過(guò)渡到C++之基本變化

欄    目:C語(yǔ)言

下一篇:C語(yǔ)言實(shí)現(xiàn)C++繼承和多態(tài)的代碼分享

本文標(biāo)題:C++ 單例模式的詳解及實(shí)例

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1307.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有