C 析構函式 為何一般定義為虛函式

2021-06-21 10:29:49 字數 437 閱讀 4744

c++ 析構函式 為何一般定義為虛函式,例子:

#include using namespace std;

class animal

; virtual ~animal()

virtual void eat()

virtual void walk()

/* data */

};class dog : public animal

virtual ~dog()

int weight;

int height;

void eat()

如果基類沒有定義為虛函式,則delete ani的時候,僅僅呼叫了父類的析構函式,子類的沒有呼叫,如果在父類和子類的建構函式中都有動態記憶體分配,那麼就會存在記憶體洩漏的問題。一般析構函式最好都寫成虛函式,尤其是父類。

析構函式定義為虛函式

析構函式執行時先呼叫派生類的析構函式,其次才呼叫基類的析構函式。如果析構函式不是虛函式,而程式執行時又要通過基類的指標去銷毀派生類的動態物件,那麼用delete銷毀物件時,只呼叫了基類的析構函式,未呼叫派生類的析構函式。這樣會造成銷毀物件不完全。include include class cpers...

析構函式定義為虛函式原因

注 本文內容 於zhice163博文,感謝作者的整理。1.為什麼基類的析構函式是虛函式?在實現多型時,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。下面 網路 源位址 a.第一段 includeusing namespace std class clxbase clxbase ...

析構函式定義為虛函式原因

先看下面一段程式 include using namespace std class person class student public person int main 執行結果 person person student student person person student studen...