在C 的基類中,析構函式為什麼宣告為虛函式?

2021-08-21 02:38:47 字數 817 閱讀 8813

在c++的基類中,析構函式為什麼宣告為虛函式,如果不宣告為虛函式時,會發生什麼?**奉上:

#include class base

~base()

};class derive :public base

~derive()

};int main(int argc, _tchar* argv)

執行結果:

base::create

derive::create

derive::malloc memory

base::destory

請按任意鍵繼續. . .

從上面的輸出結果中看出,派生類中的析構函式沒有進行呼叫。如果在派生類中申請了資源,在釋放的時候(假設派生類的資源在析構函式中**),可能會造成記憶體和資源的洩漏。這就是在基類中為什麼析構函式一般為虛函式的原因。具體原因,當刪除基類指標指向的派生類時,如果基類的析構函式不為虛函式的時候,不會觸發動態繫結,所以不會呼叫派生類的析構函式。

如果將基類中的析構函式宣告為虛函式時:

class base

virtual ~base()

};

執行結果:
base::create

derive::create

derive::malloc memory

derive::free memory

derive::destory

base::destory

請按任意鍵繼續. . .

ok

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

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

為什麼基類的析構函式宣告為虛函式?

1 作用 在實現多型時,當用基類的指標操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生。2 例項 include using namespace std class father father 1 非虛函式 private int mptr class son public father ...

為什麼要將基類的析構函式宣告為虛函式

我們大家都知道,在c 中,當乙個物件銷毀時,析構函式是用來對類物件和物件成員進行釋放記憶體和做一些其他的cleanup操作。析構函式靠 符號來區分,出現在 析構函式名字的前面,當我們去定義乙個 虛析構函式時,你只需要簡單的的在 符號前面 加乙個 virtual標誌就可以了。為什麼需要將析構函式宣告為...