C 基類的析構函式為什麼需要定義為虛函式

2021-09-02 20:17:42 字數 308 閱讀 3243

主要是因為當通過父類指標/引用,刪除子類時由於父類析構函式沒有定義為虛函式,不能表現出多型性。所以子類的析構函式不能被呼叫,從而造成記憶體洩露

#include#include#includeusing namespace std ;

class base

~base()

{cout << "base destructor is called" 《總結:

當基類的物件含有指標成員,需要在刪除物件時清除申請的記憶體單元,如果基類析構物件得不到呼叫將會造成申請的記憶體單元得不到**,造成記憶體的洩露。

為什麼基類的析構函式需要是虛函式?

先來看這句話 只有在通過基類指標 或引用 間接指向派生類子型別時多型性才會起作用。派生類的指標只呼叫自己的函式!基類指標的函式呼叫如果有virtual則根據多型性呼叫派生類的函式,如果沒有virtual則是正常呼叫基類的函式。根據這個結論,設想 如果出現用基類指標指向派生類的情況,那麼在銷毀這個指標...

C 基類析構函式為什麼要定義為虛函式

在c 實現多型裡,有乙個關於 析構函式的重寫問題 基類中的析構函式如果是虛函式,那麼派生類的析構函式就重寫了基類的析構函式。這裡他們的函式名不相同,看起來違背了重寫的規則,但實際上編譯器對析構函式的名稱做了特殊處理,編譯後析構函式的名稱統一處理成destructor。那麼為什麼要把基類中的析構函式寫...

為什麼C 基類析構函式寫成虛函式

下面的 舉例 virtual.cpp 定義控制台應用程式的入口點。include stdafx.h include define maxlen 128 class cemployee cemployee protected private class coperator public cemploy...