虛函數表(vtable)是C++中實現動態多態的關鍵組成部分。當一個類包含至少一個虛函數時,編譯器會為該類創建一個虛函數表。虛函數表中存儲了指向類中虛函數的指針。每個對象實例都有一個指向虛函數表的指針(vptr)。
在析構函數中,虛函數表的應用主要體現在以下幾個方面:
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
~Derived() override {}
};
int main() {
Base* ptr = new Derived();
delete ptr; // 調用Derived的析構函數,然后是Base的析構函數
return 0;
}
class Base {
public:
virtual ~Base() {} // 將析構函數聲明為虛函數
};
class Derived : public Base {
public:
~Derived() override {}
};
int main() {
Base* ptr = new Derived();
delete ptr; // 調用Derived的析構函數,然后是Base的析構函數
return 0;
}
總之,虛函數表在析構函數中的應用主要是確保正確的析構順序和避免父類析構函數被錯誤刪除。為了實現這些目標,通常將基類的析構函數聲明為虛函數。