1. 程式人生 > >C++中的解構函式(destructor)

C++中的解構函式(destructor)

和建構函式相似,解構函式也是一個特殊的類方法,它是用來自動釋放物件的。解構函式的表示形式為:在類名前面加上“~”即表示解構函式。與建構函式不同的是,一個類中只允許一個解構函式存在。
如果類中無解構函式,則編譯系統會預設補上一個空的解構函式。當程式結束時,會自動呼叫解構函式。例如下面的程式:

#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); //不會呼叫解構函式 }

輸出結果:

如有錯誤,歡迎大家批評與指正!