//非執行緒安全;
class singleton
void test()
private:
singleton() {}
singleton(const singleton& );
singleton& operator=(const singleton& );
};//懶漢模式:非執行緒安全,第一次呼叫才進行初始化;
class singletonlazy
void test()
private:
static singletonlazy* spts;
singletonlazy(){}
singletonlazy(const singletonlazy&);
singletonlazy& operator=(const singletonlazy&);
};singletonlazy* singletonlazy::spts = nullptr;
//執行緒安全的懶漢模式:使用雙檢鎖dcl機制
class singletonlazysafe
return spts;
} void test()
private:
static mutex m_mutex;
static singletonlazysafe* spts;
singletonlazysafe() {}
singletonlazysafe(const singletonlazysafe&);
singletonlazysafe& operator=(const singletonlazysafe&);
};singletonlazysafe* singletonlazysafe::spts = nullptr;
mutex singletonlazysafe::m_mutex;
//餓漢模式:執行緒安全,在類載入時就進行初始化。
class singletonhungary
void test()
private:
static singletonhungary* spts;
singletonhungary() {}
singletonhungary(const singletonhungary&);
singletonhungary& operator=(const singletonhungary&);
//內嵌乙個類析構單例物件,釋放資源。
class gc
~gc()
cout << "destruct" << endl;
} };
static gc gc;
};singletonhungary* singletonhungary::spts = new singletonhungary();
singletonhungary::gc singletonhungary::gc;
c 安全釋放資源
c 區域性函式中使用new分配記憶體或者create 建立com介面,由於程式可能在函式內下面的判斷 失敗退出,這樣每次都需要delete記憶體或者release,不僅麻煩而且可能忘記其中某個,造成資源沒有及時釋放.下面的通用的類可以解決這些問題 com版 template class t clas...
c 多執行緒單例模式 執行緒安全C 單例模式
我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...
C 單例模式 與執行緒安全
單例模式 作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。在下面 的物件圖中,有乙個 單例物件 而 客戶甲 客戶乙 和 客...