C 單例,執行緒安全,資源釋放

2021-09-12 03:57:04 字數 1485 閱讀 3006

//非執行緒安全;

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 單例模式 與執行緒安全

單例模式 作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。在下面 的物件圖中,有乙個 單例物件 而 客戶甲 客戶乙 和 客...