首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 虛擬解構函數與多態刪除:三個關鍵問題解答

     編輯:程式設計疑難解答

問題與答案

問題答案
1. 基類解構函數非 virtual,刪除派生類對象時,基類解構函數會被呼叫嗎?會。無論是否 virtual,派生類解構時會自動呼叫基類解構函數(按派生→基類順序)。
2. 基類指標指向派生類對象,基類解構函數非 virtual,delete 基類指標時,派生類解構函數會被呼叫嗎?不會。僅呼叫基類解構函數,導致派生類資源洩漏。基類解構函數必須宣告為 virtual。
3. 虛基類的解構函數是否自動為 virtual?否。虛基類僅解決多重繼承鑽石問題,解構函數仍需手動加 virtual。

最佳實踐

class Base {
public:
    virtual ~Base() { cout << "Base dtor\n"; } // 必須 virtual
};
class Derived : public Base {
public:
    ~Derived() { cout << "Derived dtor\n"; }
};
// 使用
Base *p = new Derived();
delete p; // 正確輸出 Derived dtor → Base dtor
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved