基類的析構函式為什麼要設為Virtual

2021-07-22 19:04:04 字數 448 閱讀 3011

#include using namespace std;

class father

//~father()

// virtual~father() };

class son : public father

~son() };

int main()

對於

father *pf=null;

pf = new son;//繫結子類物件

delete pf;

如果基類的析構函式沒有virtual,那麼delete時只呼叫基類的析構函式,

這樣只會釋放基類的記憶體,造成記憶體洩漏;

如果基類的析構函式有virtual,那麼delete時先呼叫子類的析構函式,再呼叫基類的析構函式,這樣子類的記憶體析構了,

父類的記憶體也釋放了,就不會產生記憶體洩露。

關於基類為什麼要宣告析構函式

include using namespace std class base public base cout base base cout base public concrete cout concrete concrete cout concrete base base new concret...

C 基類析構函式為什麼要定義為虛函式

在c 實現多型裡,有乙個關於 析構函式的重寫問題 基類中的析構函式如果是虛函式,那麼派生類的析構函式就重寫了基類的析構函式。這裡他們的函式名不相同,看起來違背了重寫的規則,但實際上編譯器對析構函式的名稱做了特殊處理,編譯後析構函式的名稱統一處理成destructor。那麼為什麼要把基類中的析構函式寫...

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

1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase void dosomething class clxd...