C++ 中的解構函式


解構函式是 C++ 中類的函式,用於刪除類物件。

呼叫解構函式

當類物件在程式中超出作用域時,會呼叫解構函式。物件超出作用域的情況包括:

  • 程式超出函式的作用域。

  • 程式結束。

  • 初始化物件區域性變數的程式碼塊超出作用域。

  • 當物件的運算子被刪除時。

示例

讓我們看一段程式碼並猜測程式的輸出:

 線上演示

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<"i = "<<valueInitializer()<<endl;
      return 0;
}

輸出

i = 3

讓我們先了解一下程式碼,這裡我們建立了一個全域性變數 I,然後在值初始化函式中我們改變了它的值。在這裡,我們將其初始化為值 3,然後建立物件 d1,最後返回該值。

猜猜輸出是什麼?

是 3,如果你猜對了,恭喜你!如果你認為是 10,也不要擔心。現在,看看這裡發生了什麼:

如上所述,當呼叫函式超出作用域時,會呼叫解構函式。在超出作用域之前,函式已將值 3 返回。

示例

再試一次,現在猜猜這段程式碼的輸出:

 線上演示

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int& valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<<"i = "<<valueInitializer()<<endl;
   return 0;
}

輸出

這段程式碼看起來很相似,但它

輸出:i = 10

為什麼?

在這裡,我們返回了變數的引用而不是值。因此,當呼叫解構函式時,它會將值更改為 10,並且由於傳遞了引用,因此列印 10。

更新於: 2020年4月17日

839 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.