可以先看一下下面的例子:
#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 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...