virtual析構函式

2021-07-14 22:15:13 字數 705 閱讀 2927

當派生類物件撤銷時,一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。

#include

using

namespace

std;

class base;

};class derived:public base;

};int main(void)

執行結果:

呼叫基類base的析構函式

如果在主函式中用new運算子建立乙個派生類的無名物件和定義乙個基類的物件指標,並將無名物件的位址賦給這個物件指標。當用delete運算子撤銷無名物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。當撤銷指標p所指的派生類的無名物件,而呼叫析構函式時,採用了靜態連編方式,只呼叫了基類base的析構函式。如果希望程式執行動態連編方式,在用delete運算子撤銷派生類的無名物件時,先呼叫派生類的析構函式,在呼叫基類的析構函式,可以講基類的析構函式宣告為虛析構函式。虛析構函式沒有型別,沒有引數。

將基類base修改為:

class

base

; };

呼叫派生類derived的析構函式

呼叫基類base的析構函式

呼叫的順序仍然是:先呼叫派生類的析構函式,然後再呼叫基類的析構函式。

析構函式virtual與非virtual區別

析構函式virtual與非virtual區別 作為通常的原則,如果乙個類定義了虛函式,那麼它的析構函式就應當是virtual的。因為定義了虛函式則隱含著 這個類會被繼承,並且會通過基類的指標指向子類物件,從而得到多型性。這個類可能會被繼承,並且會通過基類的指標指向子類物件 因此基類的析構函式是否為虛...

virtual 析構函式的作用

大家知道,析構函式是為了在物件不被使用之後釋放它的資源,虛函式是為了實現多型。那麼把析構函式宣告為vitual有什麼作用呢?請看下面的 1 include 2 using namespace std 34 class base 5 base的建構函式 8 base base的析構函式 9 12 vi...

C 中virtual 析構函式

我們知道,用c 開發的時候,用來做基類的類的析構函式一般都是虛函式。可是,為什麼要這樣做呢?下面用乙個小例子來說明 有下面的兩個類 class clxbase virtual clxbase virtual void dosomething class clxderived public clxba...