#include <iostream>
using namespace std;
#include <mutex>
/*
懶漢式
*/
class SingleTon {
private:
SingleTon() {
}
private:
static SingleTon* ton;
static int count;
static mutex mu;
public:
static SingleTon* getInstance() {
if (ton == NULL) {
mu.lock();
if (ton == NULL)
{
ton = new SingleTon;
}
mu.unlock();
}
return ton;
}
void add() {
count++;
cout<<count<<endl;
}
};
//靜態(tài)變量的初始化放在類的外部
//?因為類定義的時候并沒有分配內存,靜態(tài)變量也不能等到創(chuàng)建對象的時候才分配內存,必須提前分配
SingleTon* SingleTon::ton = NULL;
int SingleTon::count = 1;
mutex SingleTon::mu;
/////////////////////////////////////////////////////////////////////////////////
/*
餓漢式
*/
class SingleTon2 {
private:
SingleTon2() {
}
private:
static SingleTon2* ton;
static int count;
public:
static SingleTon2* getInstance() {
return ton;
}
void add() {
count++;
cout << count << endl;
}
};
//靜態(tài)變量的初始化放在類的外部
//?因為類定義的時候并沒有分配內存,靜態(tài)變量也不能等到創(chuàng)建對象的時候才分配內存,必須提前分配
SingleTon2* SingleTon2::ton = new SingleTon2;
int SingleTon2::count = 1;
void main() {
SingleTon* s = SingleTon::getInstance();
s->add();
SingleTon* s1 = SingleTon::getInstance();
s1->add();
SingleTon2* s3 = SingleTon2::getInstance();
s3->add();
SingleTon2* s4 = SingleTon2::getInstance();
s4->add();
system("pause");
}
17.C++設計模式-單例
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 什么是單例一個類只允許有一個實例,在整個程序中需要多次使用,共享同一份資源的時候,就可以創(chuàng)建單例,一般封裝成工具類...
- 設計模式簡介: 單例模式的適用范圍: 教科書中的標準實現: 教課書中的標準實現的優(yōu)缺點: 教課書中的標準實現的線程...
- 需求描述(實現一個線程安全且無內存泄漏的C++單例模式): 線程安全的單例模式實現(基礎版) 線程安全的單例模式(...
- “對象性能”模式 面向對象很好的解決了“抽象”的問題,但是必不可免地要付出一定的代價。對于通常情況來講,面向對象的...