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


Scott Meyers 在 Effective C++ 中提到 −

如果一個類具有任何虛擬函式,則它應具有一個虛解構函式,並且那些並未設計為基類或不用於多型的類不應宣告虛解構函式。

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

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

如果 Base 的解構函式不是虛擬函式,則在這種情況下 delete b 具有未定義的行為。將解析對解構函式的呼叫,就像針對任何非虛程式碼那樣。因此將呼叫基類的解構函式,但不呼叫派生類的解構函式,這將導致資源洩漏。


更新於: 11-Feb-2020

735 次訪問

啟動你的 職業

完成課程即可獲得認證

開始
廣告