C++中的解構函式(destructor)
阿新 • • 發佈:2019-02-15
和建構函式相似,解構函式也是一個特殊的類方法,它是用來自動釋放物件的。解構函式的表示形式為:在類名前面加上“~”即表示解構函式。與建構函式不同的是,一個類中只允許一個解構函式存在。
如果類中無解構函式,則編譯系統會預設補上一個空的解構函式。當程式結束時,會自動呼叫解構函式。例如下面的程式:
#include <iostream>
using namespac std;
class A{
public:
A(){
cout << "呼叫建構函式\n";
}
~A(){ //解構函式
cout << "呼叫解構函式\n" ;
}
};
int main(){
A a; //例項化類時自動呼叫建構函式
cout << "物件a被例項化\n";
} //程式結束後自動呼叫解構函式
輸出結果:
如果該類是通過new申請的新的動態空間,則在使用delete時會自動呼叫解構函式,同樣地在使用new時也會自動呼叫建構函式,而對於另一個申請動態空間malloc和free則不會自動對物件例項化,這也就是為什麼C++更偏向於使用new和delete來申請動態空間的原因。例如下面的程式:
#include <iostream>
using namespace std ;
class A{
public:
A(){
cout << "呼叫建構函式\n";
}
void text(){
cout << "方法text()被呼叫\n";
}
~A(){ //解構函式
cout << "呼叫解構函式\n";
}
};
int main(){
cout << "使用new\n";
A* p = new A; //例項化類時自動呼叫建構函式
cout << "使用malloc\n" ;
A* q = (A*) malloc(sizeof(A)); //不會呼叫建構函式
cout << "使用delete\n";
delete p; //呼叫解構函式
cout << "使用free\n";
free(q); //不會呼叫解構函式
}
輸出結果:
如有錯誤,歡迎大家批評與指正!