當派生類物件撤銷時,一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。
#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...