標籤:函數 class 模式 delete names 構造 opera ptr default
單例模式
概念:只能建立一個對象的類
實現關鍵: 1、所有建構函式都必須是private的(包括帶參構造,拷貝構造,賦值運算子)
2、通過static成員函數申請對象空間,並返回地址
3、定義一個靜態標記,記錄對象的個數,並控制
4、解構函式將標記清空,以達到重複申請對象的目的,解構函式是public的
5、賦值運算子、拷貝建構函式也必須是private的,由於編譯器預設合成的賦值運算子和拷貝建構函式都是public的,所以這兩個函數都要人為定義,而不能由編輯器預設合成
代碼實現:
1 #include <iostream> 2 3 using namespace std; 4 5 class Single 6 { 7 private: //由於單例模式下所有建構函式都必須是private的,但編譯器預設合成的所有建構函式都是public的, 8 Single() = default; //所以此時所有建構函式都要人為定義一遍 9 Single(const Single&) = default;10 Single& operator=(const Single&) = default;11 12 public:13 static int flag ;14 static Single* creat();15 ~Single() //解構函式是public的16 {17 flag = 0;18 }19 };20 21 int Single::flag = 0;22 23 Single* Single::creat()24 {25 if (flag == 0)26 {27 flag = 1;28 return (new Single);29 }30 else31 return nullptr;32 }33 34 35 int main()36 {37 Single *p1 = Single::creat(); //建立一個對象38 delete p1; //銷毀此對象39 40 Single *p2 = Single::creat(); //正確:由於之前的對象已經被銷毀,所以可以建立一個新對象41 Single *p3 = Single::creat(); //錯誤:該類只能存在一個唯一對象,故此時p3被建立為nullptr 42 43 return 0;44 }
C++——單例模式的實現