析構函式定義為虛函式

2021-06-01 05:00:16 字數 664 閱讀 2896

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

#include

#include

class cperson;

class cstudent:public cperson;

cperson::~cperson()

delete pocperson;

cout<<"cstudent物件已經完成析構"<

//如果析構函式是非虛函式,

那麼cstudent物件就未析構完

cstudent ocstudent;}

輸出:~student!

~cperson!

cstudent物件已經完成析構

~student!

~cperson!

如果去掉~cperson()前面的virtual,且將「cstudent物件已經完成析構」改為「cstudent物件未完成析構」。程式的執行結果為:

~cperson!

cstudent物件未完成析構

~student!

~cperson!

參考:

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

注 本文內容 於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...

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

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