單例類
描述
指在整個系統生命期中,乙個類最多只能有乙個例項(instance)存在,使得該例項的唯一性(例項是指乙個物件指標)
在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同:
用法
初探單例類-懶漢式:
#include usingnamespace
std;
class
csingleton
csingleton& operator = (const csingleton&t);
csingleton(
const csingleton &);
public
:
static csingleton*getinstance()
void
print()
};csingleton* csingleton::m_pinstance =null;
intmain()
執行列印:
0x6e2d180x6e2d18
0x6e2d18
從列印結果可以看出,該指標物件指向的都是同乙個位址,實現了乙個類最多只能有乙個例項(instance)存在.
注意:由於例項(instance),在系統生命期中,都是存在的,所以只要系統還在執行,就不需要delete
上面的懶漢式如果在多執行緒情況下,多個csingleton指標物件同時呼叫getinstance()成員函式時,由於m_pinstance = null,就會建立多個例項出來.
所以,在多執行緒情況下,需要使用餓漢實現
**如下:
classcsingleton
csingleton& operator = (const csingleton&t);
csingleton(
const csingleton &);
public
:
static csingleton*getinstance()
};csingleton* csingleton::m_pinstance = new csingleton;
單例類模板
我們現在講解的僅僅是個框架,裡面什麼都沒有,不能滿足需求啊,所以還要寫為單例類模板標頭檔案,當需要單例類時,直接宣告單例類模板標頭檔案即可
寫csingleton.h
#ifndef _singleton_h_#define _singleton_h_template
class
csingleton
public
:
static t*getinstance()
};template
t* csingleton:: m_pinstance = new
t;#endif
當我們需要這個單例類模板時,只需要在自己類裡通過friend新增為友元即可,
接下來試驗單例類模板
寫main.cpp
#include #include#include
"csingleton.h
"using
namespace
std;
class
test
test& operator = (const test&t);
test(
const test&);
public
:
void setmstr(string
t)
void
print()
};int
main()
執行列印:
mstr =abcthis = 0x2d2e30
mstr =abc
this = 0x2d2e30
mstr =abcdefg
this = 0x2d2e30
C 單例類模板詳解
單例類 描述指在整個系統生命期中,乙個類最多只能有乙個例項 instance 存在,使得該例項的唯一性 例項是指乙個物件指標 比如 統計 人數 在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同 用法 初探單例類 懶漢式 include using namespace std cl...
C 單例模板類
單例模式 singleton 是設計模式常見的一種,其目的是保證 系統中只存在某 類的唯一例項 物件 在 應用程式中,經常用於配置,日誌等的處理。使用單例模板類可以很容易地實現單例模式。如下 templateclass csingleton return m pinstance protected ...
c 單例類模板
描述 在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同 懶漢式 指 執行後,例項並不存在,只有當需要時,才去建立例項 適用於單執行緒 餓漢式 指 一執行,例項已經存在,當時需要時,直接去呼叫即可 適用於多執行緒 用法將建構函式的訪問屬性設定為private,提供乙個getinst...