簡體   English   中英

將對象指針作為指向基類的指針傳遞

[英]Passing object pointer as pointer to base class

此代碼合法嗎?

它崩潰了,我不確定這是由於我的編程環境(它是嵌入式設備)還是因為我寫了狡猾的代碼。

int foo(NGKGame * game) {
    game->init(); //Crashes here
    return 0;
}

int main() {
    NGKGame * game = new PlaneGame();
    game->init(); //This call is okay
    foo(game); 

    return 0;
}

NGKGame是基類。 PlaneGame是從派生類NGKGame init()是基類中的純虛函數,但在PlaneGame實現。

謝謝,

編輯:

作為示例的一部分,兩次調用了init函數。 在我當前的實現中,它是空的。

這可能是崩潰的,因為您在同一對象上兩次調用了init() 由於您沒有向我們展示init()的源代碼,因此我無法推測它為什么會崩潰,但似乎名為init的函數僅應調用一次。

如果您想得到更好的答案,請訪問http://sscce.org/

這段代碼很好-假設可以兩次調用init()

init()NGKGame是PV沒問題。 PV的全部目的是允許您以foo()的方式調用它們。

您的摘要沒有錯。

盡管您打算兩次調用NGKGame::init還是只是示例代碼的一部分? 我的直覺是,在這種情況下, PlaneGame::init中的某些內容在再次調用時出現故障。

代碼看起來不錯。 可能與某些編譯器標志有關。 前一段時間我有一個類似的問題。 雜湊指針的代碼可以在沒有優化標志的情況下正常工作(使用gcc),但是在打開-O3(優化)時會崩潰。 我沒有弄清楚如何消除它,所以我只是手動添加了使用-O3啟用的各種優化標志,並且效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM