當用new運算子建立了臨物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數,在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情況,系統只執行基類的析構函式,而不執行派生類的析構函式。原因是指標只找到了空間中與基類型別相同的部分,自然只呼叫基類的析構函式,可以看下面的例子:
#includeusing namespace std;
class a
~a(){cout<<"exeecuting a desturctor"<
此時與基類關聯的所有派生類的析構函式都自動變為虛析構函式。
在程式中最好把基類的析構函式宣告為虛析構函式。以保證在撤銷記憶體動態分配空間時能得到正確的處理。
c 之虛析構函式
析構函式的作用是在物件撤銷之前做必要的 清理現場 的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情...
C 之虛析構函式
相信大家都已經清楚了虛函式這個概念。在c 中,建構函式不能宣告為虛函式,而析構函式卻可以宣告為虛函式,大家可能對為什麼要把析構函式宣告為虛函式很疑惑,下面,雲主 博主 就帶大家去會會這個虛析構函式 首先,先看一段 incldue using namespace std class base 建構函式...
C 之虛析構函式
虛析構函式 如果乙個類有子類,則這個類 父類 的析構函式必須是虛函式 如果父類的析構函式不是虛函式,則當 delete 刪除乙個指向子類物件的父類指標 時,將呼叫父類版本的析構函式,子類只釋放了來自於父類的那部分成員變數,而子類自己擴充套件的成員變數沒有被釋放,造成記憶體洩漏 include std...