C 單例類模板詳解

2022-10-03 23:48:15 字數 1791 閱讀 3878

單例類

描述指在整個系統生命期中,乙個類最多只能有乙個例項(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...