C 常用設計模式之 單例模式

2021-10-03 17:15:50 字數 1198 閱讀 8342

單例模式沒啥好說解說的,這個模式太經典了,以至於即使你沒有接觸過設計模式也一定聽過單例模式的大名。網上關於單例模式的例子有很多,這裡就算做乙個歸納總結吧!

單例模式的定義:保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。

uml結構圖如下:

網路上常見的單例模式實現,有以下幾種:

//類的宣告

class singleton

//建構函式

singleton(singleton const &);//拷貝建構函式,無需實現

singleton & operator = (const singleton &);//賦值建構函式,無需實現

public:

static singleton* getinstance();

static singleton* m_instance;

};singleton* singleton::m_instance = nullptr;

//1,執行緒非安全版本

singleton* singleton::getinstance()

return m_instance;

}//2,執行緒安全版本,但鎖的代價過高(如果不是高頻訪問,效率可以接受)

singleton* singleton::getinstance()

return m_instance;

}//3,雙檢查鎖,但由於記憶體讀寫reorder不安全(這裡涉及到編譯器內部的問題,應用程式開發者

//不用去深究這個問題,知道這種方式不安全即可。)

singleton* singleton::getinstance()

}return m_instance;

}//4,c++11版本之後的跨平台實現 (volatile其實就是解決了上面的reorder不安全的問題)

std::atomicsingleton::m_instance;

std::mutex singleton::m_mutex;

singleton* singleton::getinstance()

}return tmp;

}

這裡也沒啥好總結的,如果在程式中遇到了需要使用單例模式的情況,選擇上面合適的實現即可。

常用設計模式之 單例模式

概念 從字面意思不難理解,單例模式就是指某個類僅能建立乙個例項。實現 實現單例模式常有兩個誤區 一 看見單例時,最容易聯想到的就是把乙個類的所有屬性以及方法均設為靜態的。初聽上去,這種方法是挺不錯的,但靜態屬性 方法是在類載入時就初始化了,得到自己的空間,這不是我們能夠控制的,當我們程式中有大量這種...

C 常用的設計模式之單例模式

最近在看設計模式,同時在學習過程中也檢視了大量的部落格,也查閱了很多關於設計模式的一些文章的,在此,特別記錄下我的學習筆記,加深自己對設計模式理解,同時可以給一些初學設計模式的朋友提供查閱的路徑。單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系...

C 設計模式之單例模式

在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...