C 之虛析構函式

2021-09-09 01:23:09 字數 887 閱讀 9182

#include using

namespace

std;

class

base

; ~base()

;};class derive : public

base

; ~derive()

;};int main(int argc, char **ar**)

執行結果:

執行結果:

基類的析構函式是為了,刪除指向派生類物件的基類指標時,會呼叫派生類的析構函式。

只要派生類析構函式被呼叫,之後必定呼叫基類的析構函式。

疑問:按照c++的記憶體布局,虛函式是由放在虛函式表中的函式指標指向的,由函式指標間接呼叫的。而且派生類中如果定義了虛函式,那麼虛函式表中相應存放指向基類虛函式的指標就會被指向派生類虛函式的指標替換。以此實現多型,即用基類指標呼叫派生類函式。

但是析構函式是特殊呢,因為派生類的析構函式和基類的析構函式並不重名,因此可能不是這樣處理的,此處還需要深究。

c 之虛析構函式

析構函式的作用是在物件撤銷之前做必要的 清理現場 的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情...

C 之虛析構函式

相信大家都已經清楚了虛函式這個概念。在c 中,建構函式不能宣告為虛函式,而析構函式卻可以宣告為虛函式,大家可能對為什麼要把析構函式宣告為虛函式很疑惑,下面,雲主 博主 就帶大家去會會這個虛析構函式 首先,先看一段 incldue using namespace std class base 建構函式...

C 之虛析構函式

虛析構函式 如果乙個類有子類,則這個類 父類 的析構函式必須是虛函式 如果父類的析構函式不是虛函式,則當 delete 刪除乙個指向子類物件的父類指標 時,將呼叫父類版本的析構函式,子類只釋放了來自於父類的那部分成員變數,而子類自己擴充套件的成員變數沒有被釋放,造成記憶體洩漏 include std...