首頁 > 後端開發 > C++ > C 中的純虛擬析構函數應該定義嗎?

C 中的純虛擬析構函數應該定義嗎?

Linda Hamilton
發布: 2024-12-16 17:46:10
原創
195 人瀏覽過

Should Pure Virtual Destructors in C   Be Defined?

在C 中定義純虛擬析構函數:揭示陷阱

C 中純虛擬析構函數的概念提出了有關正確實現的重要問題抽象基底類別。考慮以下程式碼片段:

class A {
public:
    virtual ~A() = 0;
};
登入後複製

問題是這種方法是否適合定義抽象基底類別。雖然它在 MSVC 中編譯成功,但人們擔心它可能會導致運行時崩潰。

揭示問題

問題源自於缺乏純粹虛擬的實作析構函數。當從 A 建立衍生類別時,它們的析構函數最終將呼叫 A 的析構函數。然而,由於 A 的析構函數是純的,因此呼叫將導致未定義的行為。

解決陷阱

為了避免這種運行時崩潰,必須實現析構函數在基類本身。一個簡單的內聯實現,如下所示,就足夠了:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
登入後複製

此實現確保當任何派生類被刪除或銷毀時,A 的析構函數將被調用,並且程序將按預期運行。

以上是C 中的純虛擬析構函數應該定義嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板