顯式析構……….

來源:互聯網
上載者:User

昨天有人問我能不能顯示調用解構函式。
我的回答是可以。但為什麼顯法調用解構函式跟沒有調用結果一樣的呢(未用new申請記憶體空間)。
至於為什麼,我今天在這裡說下。

用建構函式建立對像後,程程式負責跟蹤對象直到到期為止。 對象到期時,程式將會自動調用一個解構函式。

構析函數完成清理工作。

例如 如建構函式用new分配記憶體,則析構涵數將使用delete來釋放這些記憶體。

下面是這篇文章子的重點。

什麼時候應調用解構函式呢?這個由編譯器決定,通常不應在代碼中顯示調用解構函式(布局new除外),如果建立的是靜態儲存類對象。則其析構涵數將在程式結束時自動調用。如果建立的是自動儲存類對象,則其解構函式將在程式執行完代碼塊時自動調用。

如果對象是通過new建立的,則它將駐留在堆記憶體或自由儲存區中,當使用delete來釋放記憶體時,其解構函式將自動調用。
最後,程 序可以建立臨時對象來完成特定的操作,在這種情況下,程式將在結束對該對象的使用時自動調用其解構函式。

由於在類對象到期時解構函式將自動被調用,因此必須有一個解構函式。如果程式員沒有提供解構函式,編譯器將隱式的聲名一個預設解構函式,並在發現對象被刪除的代碼後,提供預設解構函式的定義。
上面我只是簡要的說了下解構函式。

#include<iostream>
using namespace std;
class wyz
{
private:
         int x;
public: 
     wyz(int g)
 { 
          x=g;
    
        cout<<"調用建構函式/n";
 }
    ~wyz()
 {
  
       cout<<"調用解構函式/n";
 }
    void fun()
 {
        cout<<x<<endl;
 } 
};
int main()
{
       wyz gg(10);
       gg.~wyz();
       gg.fun();
    
      return 0;
}
下面就說說為什麼顯示調用函數(未使用new申請記憶體)和沒有調用結果一樣。
首先解構函式和其它成員函數沒有多大區另,區別就是函數名特殊(名前加上了~),其次他會被編譯器自動調用。
除了這兩點之外他和別的成員函數沒什麼區別(建構函式與此不同,這裡就不說了)。
一個對象什麼時候到期由他的範圍決定。對像到期了他裡面儲存的資料也就不存在了。
 

當對象的引用或指標超出範圍時,不會運行解構函式。只有刪除指向動態指派至的指標或實際

對象(而不是對象的引用)超出範圍時,才會運行解構函式。
 

在上面的代碼中gg這個對象的範圍中是從main()的左大括弧到右大括弧。
只要在這個作用內對象gg就存在。
你雖然調用了wyz類的解構函式,但gg沒有超出他的範圍故它是存在的。

說白了很簡單,一句話解構函式的作用是完成清理。要清理什麼還是要程式員指定的。編譯器只不過協助我們管理這個,讓程式員建立一個對象後就不會管理它的銷毀時間。
上面的這個解構函式裡面什麼也沒有定義。它什麼也不做。(相當於一個空函數)。你在這裡調用他就跟你調用一個空函數的結果一樣。
要不問什麼上面的程式中會調用兩次解構函式。第一次不用說是你自己調用的,第二次是編譯器調用的。對象並不是你調用了解構函式它就不調用了,只有在對象到期它才會銷毀。

很多人對解構函式的認識是這樣的。他們認為只要調用了解構函式對象就不存在了。這種認為是錯誤的。對象或變數的銷毀是由他所在的範圍決定的。(靜太的除外)沒有超出這個範圍它就存在,超出這個範圍就銷毀它。
到此相信大家都明白了吧。

至於用採用時new時的效果今天在這裡就不說了。
 

最後聲名下,上面的都是我自己尋找資料和自己的認為。有什麼不對的地方望老師們能給指正出來。謝謝

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.