在 C++ 中何時使用虛擬解構函式?


Scott Meyers 在《高效 C++》中這樣說道 −

如果一個類有任何虛擬函式,它應該有一個虛解構函式,而未設計為基類或未設計為以多型方式使用的類不應宣告虛解構函式。

因此,你應該在多型基類中將解構函式宣告為虛擬函式。這是因為,如果你使用派生建構函式建立基類的物件 −

Base *b = new Derived();
// use b
delete b;

如果 Base 的解構函式不是虛擬函式,那麼在這種情況下 delete b 會產生未定義的行為。對於解構函式的呼叫將像任何非虛程式碼一樣得到解決。因此,將對基類的解構函式進行呼叫,但是不對派生類的解構函式進行呼叫,這將導致出現資源洩漏。


更新時間: 2020 年 2 月 11 日

735 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.