考慮以下繼承結構,派生類 derived 中申請了一塊記憶體,使用指標 i_ptr_管理,並在析構的時候釋放掉。
class
base
class
derived
:public base
~derived()
private
:int
* i_ptr_ =
nullptr;.
..}
考慮以下情景,當我們使用基類的指標管理派生類,使用delete釋放該指標時,會呼叫基類的析構函式~base(),如果基類的析構函式是虛函式,那麼就會繼續呼叫派生類的析構函式~derived();而如果基類的析構函式不是虛函式,就只會呼叫基類的析構函式,那麼派生類中的那片記憶體就不會被釋放,從而造成記憶體洩漏。
base *base_ptr =
newderived()
;delete base_ptr;
綜上所述,將基類的析構函式設為虛函式,可以保證派生類被正確地釋放。 為什麼基類的析構函式是虛函式
1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase void dosomething class clxd...
為什麼基類的析構函式是虛函式
1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase void dosomething class clxd...
為什麼基類的析構函式是虛函式?
注 本文章內容大部分來自 整理 1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。a.第一段 include using namespace std class clxbase clxbase void dosomething cla...