單例模式:又稱單件模式,單子模式。是建立型模式的一種。
作用:1)使類僅有乙個例項,2)並提供乙個全域性的對該例項的訪問點。
單例模式的最直觀實現是使用全域性變數,即定義乙個全域性例項。但這樣無法保證該類只有乙個例項,即除了全域性例項,本地依然可以建立該類的例項。
實現:由於例項化物件是由建構函式完成的,因此如果將建構函式封裝進private,外界想獲取例項只能通過public函式 getinstance()返回指向該例項的指標。
簡單**:
1)懶漢型(之所以叫懶漢型,是因為直到第一次getinstance被呼叫,」單例物件「都沒有被建立)
class csingleton
private:
csingleton()
class garbo
};private:
static csingleton * m_pinstance;
static garbo garbo;
};
其中garbo類為私有內嵌類,並例項化乙個靜態static物件。(why static?因為一條程式結束時,會處理所有全域性變數和靜態變數,包括類的靜態成員),因此會自動呼叫garbo類的析構函式,其析構函式只有乙個任務:釋放單例。
2)餓漢型(不管有沒有呼叫,我先把例項建立好了放在那裡)
class csingleton
private:
csingleton()
static csingleton m_inctance;
};
最後,別忘了在使用前先對這個例項提供乙個全域性訪問點。類似這樣:
csingleton * csingleton::m_pinstance = 0;
int main(void)
C 實現單例模式
給所需要進行單例的類ctest的建構函式宣告為private或者protected 防止在類外隨意生成ctest的物件 然後宣告乙個靜態成員變數 instance 乙個靜態成員函式getinsance staticctest getinstance staticctest instance 靜態成員...
C 實現單例模式
ifndef singleton h define singleton h include include using namespace std class locker inline locker inline void lock inline void unlock private pthre...
C 實現單例模式
class singleton 私有建構函式 singleton const singleton 拷貝建構函式,只宣告不定義,這要當使用者或友元想要拷貝構造該類的已存在例項時會出錯。singleton operator const singleton 賦值運算子,只宣告不定義,作用同上 public...