[英]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.