将对象指针作为指向基类的指针

时间:2011-12-13 04:46:05

标签: c++

此代码合法吗?

它崩溃了,我不确定是不是因为我的编程环境(它是一个嵌入式设备),还是因为我编写了狡猾的代码。

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函数就是示例的一部分。在我目前的实现中,它是空的。

4 个答案:

答案 0 :(得分:2)

它可能会崩溃,因为您在同一个对象上调用init()两次。由于你没有向我们展示init()的源代码,我无法推测它为什么会崩溃,但似乎只能调用一次名为init的函数。

如果您想要更好的答案,请参阅http://sscce.org/

答案 1 :(得分:1)

此代码很好 - 假设您可以两次拨打init()

init()中的NGKGame是PV不是问题。 PV的重点是允许您以foo()的方式调用它们。

答案 2 :(得分:0)

您的代码段没有任何问题。

虽然您是打算两次致电NGKGame::init还是仅仅是示例代码的一部分?我的预感是PlaneGame::init内部的某些内容在再次调用时出现故障,如果是这样的话。

答案 3 :(得分:0)

代码看起来很好。 可能与某些编译器标志有关。我刚才有一个类似的问题。在指针周围徘徊的代码可以在没有优化标志(使用gcc)的情况下正常工作,但在启用-O3(优化)时会崩溃。我没弄清楚如何摆脱它,所以我只是手动添加了各种使用-O3启用的优化标志,它运行正常。