C++單例模式

什麼是單例模式?函數

類對象有且只有一個,任何使用該類的人在不改變源碼的前提下都不能生成第二個對象。spa

 

實現單例的要點是什麼?3d

阻止定義對象即阻止普通構造函數和拷貝構造函數。以class Type爲例對象

Type(const Type&)爲拷構,定義:第一個參數爲自身類類型的引用,且其它參數都有默認值的構造函數。blog

其它即爲普構,且以Type()無參的默認構造函數爲首表。編譯器

默構爲private,且再無其它普構,即阻止一切形如 Type t; 和 Type t(...); 方式生成其它對象。源碼

拷構爲private且無定義,private可阻止普通用戶代碼以 Type t = Type::GetInstance(); 方式建立其它對象。此時,成員函數和友元函數仍舊能夠拷貝對象。聲明但不定義一個成員函數是合法的,試圖訪問一個未定義的成員將致使一個連接時錯誤。如此,成員函數和友元函數將沒法建立對象。編譯

與合成默構不一樣,即便咱們定義了其它構造函數,編譯器也會爲咱們合成一個拷構,故拷構需顯示聲明。class

 

知識擴展?變量

凡類對象,定義必初始化,方式無外直接初始化和拷貝初始化。

拷貝初始化在下列狀況下發生

  1.以=定義變量,如Type t2 = t1;

  2.參數傳遞:對象做爲實參傳遞給一個非引用類型的形參;

  3.函數返回值:從一個返回類型爲非引用類型的函數返回一個對象

拷貝初始化一般依靠拷貝構造函數完成。

其它爲直接初始化,直接初始化調用普通構造函數完成。

故抑制普構和拷構便可抑制初始化,達到禁止對象建立。

 

標準形式是什麼?

頭文件

 

實現文件

相關文章
相關標籤/搜索