在C 中定義純虛擬析構函數:揭示陷阱
C 中純虛擬析構函數的概念提出了有關正確實現的重要問題抽象基底類別。考慮以下程式碼片段:
class A { public: virtual ~A() = 0; };
問題是這種方法是否適合定義抽象基底類別。雖然它在 MSVC 中編譯成功,但人們擔心它可能會導致運行時崩潰。
揭示問題
問題源自於缺乏純粹虛擬的實作析構函數。當從 A 建立衍生類別時,它們的析構函數最終將呼叫 A 的析構函數。然而,由於 A 的析構函數是純的,因此呼叫將導致未定義的行為。
解決陷阱
為了避免這種運行時崩潰,必須實現析構函數在基類本身。一個簡單的內聯實現,如下所示,就足夠了:
class A { public: virtual ~A() = 0; }; inline A::~A() { }
此實現確保當任何派生類被刪除或銷毀時,A 的析構函數將被調用,並且程序將按預期運行。
以上是C 中的純虛擬析構函數應該定義嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!