欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

三種單例模式的C++實現(xiàn)-創(chuàng)新互聯(lián)

簡介

    因為在設(shè)計或開發(fā)中,肯定會有這么一種情況,一個類只能有一個對象被創(chuàng)建,如果有多個對象的話,可能會導(dǎo)致狀態(tài)的混亂和不一致。這種情況下,單例模式是最恰當(dāng)?shù)慕鉀Q辦法。它有很多種實現(xiàn)方式,各自的特性不相同,使用的情形也不相同。今天要實現(xiàn)的是常用的三種,分別是餓漢式、懶漢式和多線程式。

為撫順縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及撫順縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、撫順縣網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

    通過單例模式, 可以做到:

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

懶漢式

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

class CSingleton { public: static CSingleton* GetInstance() {      if ( m_pInstance == NULL )            m_pInstance = new CSingleton();      return m_pInstance; } private:     CSingleton(){};     static CSingleton * m_pInstance; };

GetInstance()使用懶惰初始化,也就是說它的返回值是當(dāng)這個函數(shù)首次被訪問時被創(chuàng)建的。這是一種防彈設(shè)計——所有GetInstance()之后的調(diào)用都返回相同實例的指針:
CSingleton* p1 = CSingleton :: GetInstance();
CSingleton* p2 = p1->GetInstance();
CSingleton & ref = * CSingleton :: GetInstance();
對GetInstance稍加修改,這個設(shè)計模板便可以適用于可變多實例情況,如一個類允許最多五個實例。

代碼很簡單,但是會存在內(nèi)存泄漏的問題,new出來的東西始終沒有釋放,下面是一種餓漢式的一種改進(jìn)。

class CSingleton   {   private:       CSingleton()       {       }       static CSingleton *m_pInstance;       class CGarbo        {       public:           ~CGarbo()           {               if(CSingleton::m_pInstance)                   delete CSingleton::m_pInstance;           }       };       static CGarbo Garbo;    public:       static CSingleton * GetInstance()       {           if(m_pInstance == NULL)               m_pInstance = new CSingleton();           return m_pInstance;       }   };

 在程序運行結(jié)束時,系統(tǒng)會調(diào)用CSingleton的靜態(tài)成員Garbo的析構(gòu)函數(shù),該析構(gòu)函數(shù)會刪除單例的唯一實例。使用這種方法釋放單例對象有以下特征:
1.在單例類內(nèi)部定義專有的嵌套類。
2.在單例類內(nèi)定義私有的專門用于釋放的靜態(tài)成員。
3.利用程序在結(jié)束時析構(gòu)全局變量的特性,選擇最終的釋放時機。

餓漢式

    餓漢式的特點是一開始就加載了,如果說懶漢式是“時間換空間”,那么餓漢式就是“空間換時間”,因為一開始就創(chuàng)建了實例,所以每次用到的之后直接返回就好了。

class CSingleton   {   private:       CSingleton()         {       }   public:       static CSingleton * GetInstance()       {           static CSingleton instance;            return &instance;       }   };

   餓漢式是線程安全的,在類創(chuàng)建的同時就已經(jīng)創(chuàng)建好一個靜態(tài)的對象供系統(tǒng)使用,以后不再改變,懶漢式如果在創(chuàng)建實例對象時不加上synchronized則會導(dǎo)致對對象的訪問不是線程安全的。

注:線程安全的通俗解釋 - 不管多個線程是怎樣的執(zhí)行順序和優(yōu)先級,或是wait,sleep,join等控制方式,如果一個類在多線程訪問下運轉(zhuǎn)一切正常,并且訪問類不需要進(jìn)行額外的同步處理或者協(xié)調(diào),那么我們就認(rèn)為它是線程安全的。 線程安全的類應(yīng)當(dāng)封裝了所有必要的同步操作,調(diào)用者無需額外的同步。還有一點:無狀態(tài)的類永遠(yuǎn)是線程安全的。

     在餓漢式的單例類中,其實有兩個狀態(tài),單例未初始化和單例已經(jīng)初始化。假設(shè)單例還未初始化,有兩個線程同時調(diào)用GetInstance方法,這時執(zhí)行 m_pInstance == NULL 肯定為真,然后兩個線程都初始化一個單例,最后得到的指針并不是指向同一個地方,不滿足單例類的定義了,所以餓漢式的寫法會出現(xiàn)線程安全的問題!在多線程環(huán)境下,要對其進(jìn)行修改。

多線程下的單例模式

    這里要處理的是懶漢模式。

class Singleton { private:     static Singleton* m_instance;     Singleton(){} public:     static Singleton* getInstance(); };  Singleton* Singleton::getInstance() {     if(NULL == m_instance)     {         Lock();//借用其它類來實現(xiàn),如boost         if(NULL == m_instance)         {             m_instance = new Singleton;         }         UnLock();     }     return m_instance; }

使用double-check來保證thread safety.但是如果處理大量數(shù)據(jù)時,該鎖才成為嚴(yán)重的性能瓶頸。

參考

C++中的單例模式

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:三種單例模式的C++實現(xiàn)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://aaarwkj.com/article4/cojgie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、面包屑導(dǎo)航網(wǎng)站改版、外貿(mào)建站、網(wǎng)站制作、虛擬主機

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
国产精品三级电影网| 青青草免费视频观看在线| 久久av天堂在线观看| 黄色av一本二本在线观看| 亚洲精品日韩国产av| 国产精品高清另类一区二区三区 | 性感美女国产av一区二区三区| 日本在线最新视频一区二区三区| 免费人成网站视频在线观看不卡| 丰满高潮少妇在线观看| 色偷偷亚洲精品一区二区| 国产三级在线观看视频| 国产有码日产一区在线观看| 三级av电影中文字幕| 日韩精品一区高清视频| 久久日韩精品人妻一区二区| 亚洲最大av免费在线看| 乱色精品熟女一区二区三区| 国产精品午夜福利亚洲综合网 | 精品国产无遮挡污污网站| 日韩av在线不卡一区二区| 色综合久久婷婷色综合网| 亚洲天堂欧美日韩一区| 久久亚洲综合精品少妇| 成人av影视中文字幕 | 亚洲av天堂在线观看| 国产精品欧美色区福利在线| 精品视频中文字幕天码| 欧美特黄在线免费观看| 国产一区二区三区性色| 久久综合亚洲一区二区三区色| 草逼免费在线观看视频| 女性裸体无遮挡啪啪网站| 欧美日韩国产一区二区的| 欧美老熟妇一区二区三区| 久久久久久精品人妻网| 粉嫩av一区二区三区四区| 少妇肥臀一区二区三区| 欧美一区二区三区免费精品| 亚洲精品成人久久国产| 亚洲精品国产熟女久久|