C 之虛析構函式

2021-09-19 22:51:15 字數 694 閱讀 1355

虛函式主要用於實現多型

而析構函式主要用於釋放記憶體

所以虛析構函式主要用於在有多型的時候釋放記憶體

(突然感覺理解的好膚淺,但是又很好理解了)

看看下面例子

class base

;base::base()

base::~base()

class demo : public base

;demo::demo()

demo::~demo()

int main()

其執行結果為

容易發現實現多型的時候只執行了基類的析構函式,並沒有執行demo的析構函式,所以容易造成記憶體洩漏

而將base的析構函式改為虛函式

virtual ~base();
則執行結果為

這下析構的可徹底了

暗示:

虛析構函式一般在需要實現多型的基類中才使用,當然為了保險起見可以每個類都是用,但是虛函式造成的開銷就要你自己去報銷了。

c 之虛析構函式

析構函式的作用是在物件撤銷之前做必要的 清理現場 的工作。當派生類的物件從記憶體中撤銷時一般先呼叫派生類的析構函式,然後再呼叫基類的析構函式。但是,如果用new運算子建立了臨時物件,若基類中有析構函式,並且定義了乙個指向該基類的指標變數。在程式用帶指標引數的delete運算子撤銷物件時,會發生乙個情...

C 之虛析構函式

相信大家都已經清楚了虛函式這個概念。在c 中,建構函式不能宣告為虛函式,而析構函式卻可以宣告為虛函式,大家可能對為什麼要把析構函式宣告為虛函式很疑惑,下面,雲主 博主 就帶大家去會會這個虛析構函式 首先,先看一段 incldue using namespace std class base 建構函式...

C 之虛析構函式

虛析構函式 如果乙個類有子類,則這個類 父類 的析構函式必須是虛函式 如果父類的析構函式不是虛函式,則當 delete 刪除乙個指向子類物件的父類指標 時,將呼叫父類版本的析構函式,子類只釋放了來自於父類的那部分成員變數,而子類自己擴充套件的成員變數沒有被釋放,造成記憶體洩漏 include std...