虛析構函式

2021-06-09 11:11:45 字數 757 閱讀 1703

在析構函式前面加上關鍵字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 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...