首頁 >後端開發 >C++ >為什麼我的程式會因'純虛擬函數呼叫”錯誤而崩潰?

為什麼我的程式會因'純虛擬函數呼叫”錯誤而崩潰?

Linda Hamilton
Linda Hamilton原創
2024-11-12 03:51:01677瀏覽

Why Does My Program Crash with a

揭開「純虛擬函數呼叫」崩潰之謎

在數位領域,崩潰是不可避免的麻煩,會讓用戶摸不著頭腦。在這些令人困惑的錯誤中,「純虛函數呼叫」是一個特別令人費解的謎。

當抽象類別的物件建立嘗試失敗時就會出現此問題,讓使用者想知道這類程式到底是如何編譯的。然而,罪魁禍首不在於類別的抽象性質,而在於試圖從建構函數或析構函數中呼叫虛擬函數。

如下面的程式碼片段所示,這種嘗試是程式設計失誤:

class Base
{
public:
    Base() { reallyDoIt(); }
    void reallyDoIt() { doIt(); } // DON'T DO THIS
    virtual void doIt() = 0;
};

class Derived : public Base
{
    void doIt() {}
};

int main(void)
{
    Derived d;  // This will cause "pure virtual function call" error
}

這裡,Base 類別的建構函式呼叫了虛函式 doIt()。但由於衍生類別Derived還沒有完全構造完成,虛函數表還沒有建立,導致呼叫了基底類別的純虛函數,而該函數並不存在。

這種錯誤場景導致導致可怕的「純虛函數呼叫」錯誤,使程式崩潰。

為了避免此類事故,避免在建構函式或析構函式中進行虛函式呼叫至關重要。透過遵循這種最佳實踐,您可以確保程式碼的穩定性,並免除調試這些難以捉摸的崩潰的麻煩。

以上是為什麼我的程式會因'純虛擬函數呼叫”錯誤而崩潰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn