小談虛析構函式

2021-04-09 05:52:25 字數 567 閱讀 1110

可以先看一下下面的例子:

#include

using namespace std;

class mother

//virtual ~mother()//

};class son :public mother

};class grandson:public son

};int main()

a:當基類mother的析構函式不是virtual 輸出情況為:

~mother() 

~mother()

~son()

~mother()

~grandson()

~son()

~mother()

第一行是delete one輸出的結果;第二行是delete two的輸出結果;第三.四行是delete three的輸出結果;

第5~7行是grandson four的虛構函式

b:當基類mother的析構函式是virtual 輸出情況為:

~son()

~mother()

~grandson()

~son() 

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...

C 虛析構函式 純虛析構函式

虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...