在析構函式前面加上關鍵字virtual進行說明,稱該析構函式為虛析構函式。例如:
class b
;該類中的析構函式就是乙個虛析構函式。
如果乙個基類的析構函式被說明為虛析構函式,則它的派生類中的析構函式也是虛析構函式,不管它是否使用了關鍵字virtual進行說明。
說明虛析構函式的目的在於在使用delete運算子刪除乙個物件時,能保析構函式被正確地執行。因為設定虛析構函式後,可以採用動態聯編方式選擇析構函式。
下面舉乙個用虛析構函式的例子。
#include using namespace std;
class a
};class b : public a
~b()
private:
char * buf;
};void fun(a *a)
void main()
執行該程式輸出如下結果:
b::~b() called.
a::~a() called.
如果類a中的析構函式不用虛函式,則輸出結果如下:
a::~a() called.
虛函式和普通成員函式的區別,是虛函式放在虛函式表中,通過物件的this指標找到該類的虛函式表,然後呼叫。c++即採用此機制實現多型。如果是普通函式,每個函式的位址是死的。所以用a類的物件呼叫析構函式時只能調到a的析構。如果是虛函式,則會通過指標找到b的析構函式,而b繼承自a,還會呼叫a的析構函式。
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...