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。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP