在繼承的時候,父類的指標(或引用)可以指向(引用)子類的物件。如果子類有自己的指標屬性,那麼就需要將父類的析構函式宣告為虛析構函式,否則通過父類指標(或者引用)無法呼叫子類的析構函式。
下面這段**演示了這種情形
#define _crt_secure_no_warnings
#includeusing std::cout;
using std::endl;
class parent
parent(const parent& p) //拷貝建構函式
~parent() //析構函式
cout << "基類析構函式" << endl;
}};class son : public parent
~son()
cout << "派生類析構函式" << endl;
delete物件指標s的時候,並沒有呼叫派生類的析構函式,這造成了記憶體洩漏。如果有很多都是父類指標指向子類物件的,並且程式一致不結束,那麼這將是非常可怕的。為此c++為我們提供了虛析構。有了虛析構就不用太過擔心記憶體洩漏的發生。
當我們在父類宣告析構函式為虛析構。那麼這時候delete物件指標s就不會有記憶體洩漏發生。
虛析構函式是為了解決這樣的乙個問題:基類的指標指向派生類物件,並用基類的指標刪除派生類物件。
當乙個類不作為基類使用的時候不要把它的析構函式宣告為虛析構函式,這樣會增加乙個虛函式表。使類的體積增大。
虛析構和純虛析構 C
解決父類無法釋放子類的堆區記憶體問題。注意 純虛析構無法例項化 虛析構和純虛析構 多型使用時,如果子類有物件開闢到堆區,那麼父類指標在釋放時無法呼叫到子類的析構 解決方式 將父類中的析構函式改為虛析構或者純虛析構 虛析構和純虛析構的共性 可以解決父類指標釋放子類物件 都需要有具體的函式實現虛析構和純...
c 之虛析構函式
析構函式的作用是在物件撤銷之前做必要的 清理現場 的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情...
C 之虛析構函式
相信大家都已經清楚了虛函式這個概念。在c 中,建構函式不能宣告為虛函式,而析構函式卻可以宣告為虛函式,大家可能對為什麼要把析構函式宣告為虛函式很疑惑,下面,雲主 博主 就帶大家去會會這個虛析構函式 首先,先看一段 incldue using namespace std class base 建構函式...