為什麼基類的析構函式是虛函式

2021-10-05 02:00:16 字數 529 閱讀 3699

考慮以下繼承結構,派生類 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...