【C++筆記】解構函式(destructor)

來源:互聯網
上載者:User

標籤:span   div   本地   psi   名稱   bsp   code   operator   strong   

“解構函式”是建構函式的反向函數。 在銷毀(釋放)對象時將調用它們。 通過在類名前面放置一個波狀符號 (~) 將函數指定為類的解構函式。 

  聲明解構函式  解構函式是具有與類相同的名稱但前面是波狀符號 ( ~) 的函數

該文法的第一種形式用於在類聲明中聲明或定義的解構函式;第二種形式用於在類聲明的外部定義的解構函式。

多個規則管理解構函式的聲明。 解構函式:

  • 不接受參數。

  • 無法指定任何傳回型別(包括 void)。

  • 無法使用 return 語句傳回值。

  • 無法聲明為 const、volatile 或 static。 但是,可以為聲明為 const、volatile 或 static 的對象的析構調用它們。

  • 可以聲明為 virtual。 通過使用虛擬解構函式,無需知道對象的類型即可銷毀對象 - 使用虛函數機制調用該對象的正確解構函式。 請注意,解構函式也可以聲明為抽象類別的純虛函數。

 

使用建構函式  

當下列事件之一發生時,將調用解構函式:

  • 使用 delete 運算子顯式解除配置了使用 new 運算子分配的對象。 使用 delete 運算子解除配置對象時,將為“大多數派生對象”或為屬於完整對象,但不是表示基類的子物件的對象釋放記憶體。 此“大多數派生對象”解除配置一定僅對虛擬解構函式有效。 在類型資訊與實際對象的基礎類型不符的多重繼承情況下,取消分配可能失敗。

  • 具有區塊範圍的本地(自動)對象超出範圍。

  • 臨時對象的生存期結束。

  • 程式結束,並且存在全域或靜態對象。

  • 使用解構函式的完全限定名顯式調用了解構函式。 (有關詳細資料,請參閱顯式解構函式調用。)

 

樣本

// operator delete[] example#include <iostream>     // std::coutstruct MyClass {  MyClass() {std::cout <<"MyClass constructed\n";}  ~MyClass() {std::cout <<"MyClass destroyed\n";}};int main () {  MyClass * pt;  pt = new MyClass[3];  delete[] pt;  return 0;}

輸出:

myclass constructedmyclass constructedmyclass constructedmyclass destroyedmyclass destroyedmyclass destroyed

 

【C++筆記】解構函式(destructor)

聯繫我們

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