C++——單例模式的實現

來源:互聯網
上載者:User

標籤:函數   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++——單例模式的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.