C C C 中定義虛析構函式的原因

2021-07-10 23:06:18 字數 1181 閱讀 6497

如果類中有虛函式,一般將該類的析構函式定義為虛函式。

在下面的例子中,沒有將析構函式定義為虛函式:

#include "iostream"

using

namespace

std;

class parent

//virtual ~parent()

~parent()

;class child : public parent

~child()

;//在父類中宣告虛析構函式的原因

//通過父類指標,把所有的子類析構函式都執行一遍。。。

void howtodel(parent *pbase)

int main()

輸出:

parent()

child()

~parent()

parent()

~parent()

可以看到執行howtodel(pc1);析構子類物件的時候,僅僅呼叫了父類的析構函式,而沒有根據傳入的子類物件就呼叫子類的析構函式。

將析構函式定義為虛函式:

#include "iostream"

using

namespace

std;

class parent

virtual ~parent()

;class child : public parent

~child()

;//在父類中宣告虛析構函式的原因

//通過父類指標,把所有的子類析構函式都執行一遍。。。

void howtodel(parent *pbase)

int main()

輸出:

parent()

child()

~child()

~parent()

parent()

~parent()

可以看到執行howtodel(pc1);析構子類物件的時候,呼叫了父類的析構函式,也根據傳入的子類物件呼叫子類的析構函式。(還可以看到在子類物件中建構函式和析構函式執行的順序是相反的)

在父類中宣告虛析構函式的原因:通過父類指標,把所有的子類析構函式都執行一遍。這也是多型現象。

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

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