單例類
描述指在整個系統生命期中,乙個類最多只能有乙個例項(instance)存在,使得該例項的唯一性(例項是指乙個物件指標) , 比如:統計**人數
在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同:
用法
初探單例類-懶漢式:
#include
using namespace std;
class csingleton
csingleton& operator = (const csingleton& t);
csingleton(const csingleton &);
public:
static csingleton* getinstance()
void print()
執行列印:
0x6e2d18
0x6e2d18
0x6e2d18
從列印結果可以看出,該指標物件指向的都是同乙個位址,實現了乙個類最多只能有乙個例項(instance)存在.
注意:由於例項(instagovrrnce),在系統生命期中,都是存在的,所以只要系統還在執行,就不需要delete
上面的懶漢式如果在多執行緒情況下 ,多個csingleton指標物件同時呼叫getinstance()成員函式時,由於m_pinstance = null,就會建立多個例項出來.
所以,在多執行緒情況下,需要使用餓漢實現
**如下:
class csingleton
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:
voi程式設計客棧d setmstr(string t)
程式設計客棧void print()
mstr = abc
this = 0x2d2e30
mstr = abc
this = 0x2d2e30
mstr = abcdefg
this = 0x2d2e30
本文標題: c++單例類模板詳解
本文位址:
28 C 單例類模板 詳解
單例類 描述 指在整個系統生命期中,乙個類最多只能有乙個例項 instance 存在,使得該例項的唯一性 例項是指乙個物件指標 在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同 用法 初探單例類 懶漢式 include using namespace std class csin...
C 單例模板類
單例模式 singleton 是設計模式常見的一種,其目的是保證 系統中只存在某 類的唯一例項 物件 在 應用程式中,經常用於配置,日誌等的處理。使用單例模板類可以很容易地實現單例模式。如下 templateclass csingleton return m pinstance protected ...
c 單例類模板
描述 在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同 懶漢式 指 執行後,例項並不存在,只有當需要時,才去建立例項 適用於單執行緒 餓漢式 指 一執行,例項已經存在,當時需要時,直接去呼叫即可 適用於多執行緒 用法將建構函式的訪問屬性設定為private,提供乙個getinst...