為什麼子類的虛構函式沒有執行?

2021-10-02 23:50:08 字數 598 閱讀 6819

首先我們知道多型機制就是處理類繼承時使用同名的函式不會出錯,今天碰到乙個有意思的問題。

這裡子類son 是繼承father 類的,當刪除父類物件時首先會呼叫子類的析構函式再呼叫父類的析構函式。

神奇的一幕發生了:

為什麼沒有執行子類的析構函式?

如果基類指標指向的是基類物件,那麼只呼叫基類的析構函式,如果基類指標指向的是子類物件,那麼先呼叫子類的析構函式,再呼叫父類的析構函式。

為了防止子類的析構函式沒有執行,我們把父類的析構函式,定義為virtual 虛函式。

// 如果對 father類的指標使用delete操作時,

// 就會對該指標使用「動態析構」:

// 如果這個指標,指向的是子類物件,

// 那麼會先呼叫該子類的析構函式,再呼叫自己類的析構函式

為了防止記憶體洩漏,最好是在基類析構函式上新增virtual關鍵字,使基類析構函式為虛函式

為什麼子網號位數沒有0,1,15和16

當子網號位數為0時 相當於沒有劃分子網。當子網號位數為16時 相當於主機所佔位數全部用於劃分子網,只有子網號,卻沒有主機號了。即每個子網中的有效主機數為0 當子網號位數為15時 相當於主機號剩餘一位,即有兩種取值 0,1 當取值為0時,實際為該子網的網路位址,取值為1時實際為該子網的廣播位址。這兩個...

建構函式為什麼不能是虛建構函式

class a private int value 為什麼建構函式不能是虛函式呢?這裡你需要知道乙個概念,那就是虛函式表vtbl,每乙個擁有虛成員函式的類都有乙個指向虛函式表的指標。物件通過虛函式表裡儲存的虛函式位址來呼叫虛函式。那虛函式表指標是什麼時候初始化的呢?當然是建構函式。當我們通過new來...

為什麼虛構函式不允許丟擲異常

第乙個原因 session session session session 設想如果在析構函式的logdestruction函式中丟擲異常,那麼 endtransaction就不會被呼叫,因為異常發生之後異常點 即logdestruction 之後的語句塊不會被執行。因此會產生資源洩漏。解決方法如下...