c++ -- 解構函式

來源:互聯網
上載者:User

標籤:

1、解構函式形式:~類名(){}無參數,無傳回值,故不能被重載,只能有一個2、作用:釋放類對象佔用的資源(不能釋放動態分配的資源 如用 new 申請的資源)當一個變數超出自己的範圍時佔用的資源會被釋放,同樣,動態分配的資源在此時是不被釋放的必須手動的釋放,否則會造成記憶體泄露如:string *p ;{string *q = new string("hello")p = q ;}//在這裡當遇到右花括弧,會釋放他所在塊申請的資源,但動態分配的無法釋放cout<<*p<<endl ; 輸出結果為:hello同樣解構函式也無法釋放對象中動態申請的資源如 1 class node 2 { 3     public: 4  5     int a,b; 6     node() 7     { 8        *p = "hello" ; 9         a = 0 ;10         b = 0 ;11     }12     ~node()13     {14         cout<<"this is destruct\n" ;15         //delete p ;16     }17 18 };19 20 int main()21 {22     string *q ; 23     24    {25       node a ; 26       q = a.p ;27    }28    29    cout<<"q is "<<*q<<endl ; 30 31 }輸出結果:hello但是如果加上delete,就會出錯了。3、合成解構函式:無論我們自己是否為類編寫解構函式,編譯器都會合成一個解構函式,用於釋放資源,而我們的自己的解構函式只是在釋放對象是做些想做的操作(書上這麼說的雖然我感覺不是這樣,當然可以理解為只有我們自己的解構函式執行操作並釋放資源),所以釋放對象的時候先執行我們自己的解構函式,再執行合成的解構函式。4.解構函式撤銷對象的順序:無論是類對象之間,還是類對象內部的資料成語,解構函式都是按照聲明順序的逆序釋放資源*/

  

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.