在 C++ 中何時使用虛解構函式?
Scott Meyers 在 Effective C++ 中提到 −
如果一個類具有任何虛擬函式,則它應具有一個虛解構函式,並且那些並未設計為基類或不用於多型的類不應宣告虛解構函式。
因此應在多型基類中將解構函式宣告為虛擬函式。這是因為如果使用派生建構函式透過基類建立物件 −
Base *b = new Derived(); // use b delete b;
如果 Base 的解構函式不是虛擬函式,則在這種情況下 delete b 具有未定義的行為。將解析對解構函式的呼叫,就像針對任何非虛程式碼那樣。因此將呼叫基類的解構函式,但不呼叫派生類的解構函式,這將導致資源洩漏。
廣告