c++中經常將基類的析構函式定義為虛函式。
當用基類指標去去釋放乙個派生類物件時,如果基類的析構函式沒有定義為虛函式,則不會呼叫派生類的析構函式,這樣會造成記憶體洩漏。
如下例子:
/* note:your choice is c ide */
#include "stdio.h"
#include"iostream"
using namespace std;
class a
virtual ~a()
};class b:public a
~b()
};void main()
實驗結果為:
a construct
b construct
~b~a
此時析構函式呼叫的順序剛好和構造函式呼叫順序相反。
如果將基類析構函式的關鍵字virtual 去掉,實驗結果為:
a construct
b construct
~a可見派生類的析構函式並為被呼叫。
C 虛析構函式的作用
1 作用 為了在實現多型的時候不造成記憶體洩露,如果基類析構函式前不加vitual,派生類物件被銷毀後,只會呼叫基類的析構函式,而不會去呼叫派生類的析構函式。2 對於正常的函式,如果基類中宣告為virtual,則派生類可以不用再寫virtual c sharp view plain copy inc...
虛析構函式的作用
析構函式的作用就在於我們呼叫完乙個類物件時,為了避免記憶體洩漏,我們必須刪除這個類物件,這時析構函式就派上用場了。但是,當我我們定義乙個基類指標指向派生類後,再刪除這個指標時我們會發現,程式只是呼叫了基類的析構函式,卻沒有呼叫派生類的析構函式。為了解決這個問題,虛析構函式閃亮登場!當!當!當!虛析構...
虛析構函式的作用
我們知道,用c 開發的時候,用來做基類的類的析構函式一般都是虛函式。可是,為什麼要這樣做呢?下面用乙個小例子來說明 有下面的兩個類 class clxbase public clxbase virtual clxbase virtual void dosomething class clxderiv...