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