28 C 單例類模板 詳解

2021-09-07 17:50:20 字數 2392 閱讀 9427

單例類

描述

指在整個系統生命期中,乙個類最多只能有乙個例項(instance)存在,使得該例項的唯一性(例項是指乙個物件指標)

在單例類裡,又分為了懶漢式和餓漢式,它們的區別在於建立例項的時間不同:

用法

初探單例類-懶漢式:

#include using

namespace

std;

class

csingleton

csingleton& operator = (const csingleton&t);

csingleton(

const csingleton &);

public

:

static csingleton*getinstance()

void

print()

};csingleton* csingleton::m_pinstance =null;

intmain()

執行列印:

0x6e2d18

0x6e2d18

0x6e2d18

從列印結果可以看出,該指標物件指向的都是同乙個位址,實現了乙個類最多只能有乙個例項(instance)存在.

注意:由於例項(instance),在系統生命期中,都是存在的,所以只要系統還在執行,就不需要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

:

void setmstr(string

t)    

void

print()

};int

main()

執行列印:

mstr =abc

this = 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...