單例模式中乙個類只有乙個對應例項
1. 懶漢式
#include using namespace std;
class foo
void print()
private:
int data1;
int data2;
foo(int data1) :data1(data1)
foo(const foo&) = delete; // 拒絕複製構造
foo& operator=(const foo&) = delete; // 拒絕賦值
static foo* m_pinstance;
};//私有靜態成員必須先初始化
foo* foo::m_pinstance = nullptr;
int main()
/* 問題
1. 多執行緒時 m_pinstance 競爭
2. 記憶體洩漏, 因為沒有 delete */
2. 執行緒安全、記憶體安全懶漢式#include #include #include using namespace std;
class foo
return m_pinstance;
}void print()
private:
int data1;
int data2;
foo(int data1) :data1(data1)
foo(const foo&) = delete; // 拒絕複製構造
foo& operator=(const foo&) = delete; // 拒絕賦值
static shared_ptrm_pinstance;
static mutex m_mutex;
};//私有靜態成員必須先初始化
shared_ptrfoo::m_pinstance = nullptr;
mutex foo::m_mutex;
int main()
3. 推薦懶漢式 (magic static)#include using namespace std;
class foo
void print()
private:
int data1;
int data2;
foo(int data1) :data1(data1)
foo(const foo&) = delete; // 拒絕複製構造
foo& operator=(const foo&) = delete; // 拒絕賦值
};int main()
4. crtp 奇異遞迴模板單列模式
在某些情況下,我們系統中可能有多個單例,如果都按照這種方式的話,實際上是一種重複,有沒有什麼方法可以只實現一次單例而能夠復用其**從而實現多個單例呢?
templateclass foo
virtual ~foo() {}
void print()
protected:
int data1;
int data2;
foo(int data1) :data1(data1)
foo(const foo&) = delete; // 拒絕複製構造
foo& operator=(const foo&) = delete; // 拒絕賦值
};// 為了保證每個繼承類都是單例
class derive :public foo;
5. 函式模板返回引用方式單例class a
~a(){}
};templatet& get_global()
int main()
6. 餓漢單例模式// 執行緒安全
class foo
private:
foo(){}
foo(const foo&) = delete; // 拒絕複製構造
foo& operator=(const foo&) = delete; // 拒絕賦值
static foo* m_pinstance;
};foo* foo::m_pinstance = new foo(); // 靜態直接初始化
C 單例模式
include using namespace std 單例類的c 實現 class singleton 構造方法實現 singleton singleton void singleton setvar int var main int main int argc,char argv return ...
C 單例模式
實現方式一 include template typename t class singleton boost noncopyable static void init private static pthread once t ponce statict value template typena...
C 單例模式
效率有點低,但是還算安全的單例模式,靜態成員實現方式 class singleton public static singleton getinstance singleton singleton getinstance unlock return m instance 內部靜態例項的懶漢模式,c ...