c++設(shè)計模式之單例模式-創(chuàng)新互聯(lián)

1. 單例模式簡介

?在一個進程中,一個類僅創(chuàng)建一個唯一的實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
?主要應(yīng)用場景有:日志記錄,配置管理,線程池,連接池,內(nèi)存池等。

創(chuàng)新互聯(lián)是專業(yè)的三河網(wǎng)站建設(shè)公司,三河接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行三河網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!2. 如何定義一個單例

1. 構(gòu)造函數(shù)私有化
包括普通構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦值操作符重載函數(shù),防止出現(xiàn)一個以上的實例。
2. 使用類的私有靜態(tài)指針變量指向類的唯一實例
3. 使用一個公有的靜態(tài)方法獲取該實例

3. 代碼實現(xiàn)
class Singleton
{
private:
?? ?static Singleton* instance;
private:
?? ?Singleton() {};
?? ?~Singleton() {};
?? ?Singleton(const Singleton&);
?? ?Singleton& operator=(const Singleton&);
public:
?? ?static Singleton* getInstance()?
? ? {
?? ??? ?if(instance == NULL)
?? ??? ??? ?instance = new Singleton();
?? ??? ?return instance;
?? ?}
};
?
// init static member
Singleton* Singleton::instance = NULL;
4. 線程安全

?線程安全問題根本原因:兩個線程同時調(diào)用getInstance(),可能產(chǎn)生兩個實例。

? 一般考慮加鎖的方式避免線程安全問題,但加鎖比較繁瑣,并且稍有不慎仍然可能出問題。

? 本文從用法上來避免線程安全問題,此方法簡單明了,不會出錯,適合大部分場景。

? 本文的用法如下:

? 在主線程中事先創(chuàng)建好實列,以后在其他線程中僅僅獲取該實例指針進行使用。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當前名稱:c++設(shè)計模式之單例模式-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://muchs.cn/article38/dooepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計、動態(tài)網(wǎng)站網(wǎng)站建設(shè)、外貿(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è)計公司