如果乙個類不會用作基類,就不需要使用任何虛函式,因為使用虛函式會增加程式的開銷。但是,如果要作為基類,為維護完整性,就需要使用虛函式,讓子類定義自己的具體行為。
所以基本的一條是,無故的宣告虛析構函式和永遠不去宣告一樣是錯誤的。
實際上,很多人這樣總結:當且僅當類裡包含至少乙個虛函式的時候才去宣告虛析構函式。
至於虛析構函式,c++語言標準關於這個問題的闡述非常清楚:當通過基類的指標去刪除派生類的物件,
而基類又沒有虛析構函式時,結果將是不可確定的.
析構函式定義為虛函式有何好處?
1 我們知道"析構函式"的作用就是解除安裝資源,
2 而虛函式能保證"總是執行實際物件的"那個函式.
3 所以,我們把析構函式定義為虛函式總能保證物件釋放時總是呼叫"物件自己的函式",
4 析構函式定義為虛函式的好處就是能避免"資源洩露",更安全. 因此析構函式總是虛函式.因為這樣總不會有錯;否則,你就要處處小心
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...