C++ 設計模式–單例模式singleton
單例模式
單例模式是指確保一個類在任何情況下都絕對只有一個實例,并提供一個全局訪問點。
優點:內存中只有一個實例,減少內存開銷;避免對資源多重占用;設置全局訪問點,嚴格控制訪問。
缺點:沒有接口,擴展困難;如果要擴展單例對象,只有修改代碼,沒有其他途徑,不符合程序的開閉原則。
餓漢式單例模式
餓漢式單例模式在類加載的時候就立即初始化,并且創建單例對象。它絕對線程安全,在線程還沒出現以前就實例化了,不可能存在訪問安全問題。
- 優點:不用加鎖就能保證線程安全。
- 缺點:內存浪費。
懶漢式單例模式
該模式的特點是類加載時沒有生成單例,只有當第一次使用時才去創建這個單例。
- 優點:避免內存浪費。
- 缺點:必須加鎖才能保證線程安全,加鎖則會影響性能。
單例模式封裝類singleton(餓漢式單例模式)
#ifndef __RADIXUN_SINGLETION_H__
#define __RADIXUN_SINGLETION_H__namespace radixun{/*** @brief 單例模式封裝類* @details T 類型* X 為了創造多個實例對應的Tag* N 同一個Tag創造多個實例索引*/
template<class T, class X = void, int N = 0>
class Singleton {
public:/*** @brief 返回單例裸指針*/static T* GetInstance() {static T v;return &v;}
};/*** @brief 單例模式智能指針封裝類* @details T 類型* X 為了創造多個實例對應的Tag* N 同一個Tag創造多個實例索引*/
template<class T, class X = void, int N = 0>
class SingletonPtr {
public:/*** @brief 返回單例智能指針*/static std::shared_ptr<T> GetInstance() {static std::shared_ptr<T> v(new T);return v;}
};}#endif