我对C ++矢量理解有一个问题:我从矢量获得的对象始终是基本抽象类,而不是添加到它的派生类。


我有一个向量:

vector<SceneNode*> children;



其中SceneNode是具有纯虚函数的抽象类。


我将ImageSceneNode的实例(从SceneNode派生)添加到此向量:

lib::ImageSceneNode node(static_cast<TextureAsset*>(test));

sceneManager.getRoot()->addChild(&node);



其中addChild函数是:

   void SceneNode::addChild(SceneNode* child) noexcept {
        this->children.push_back(child);
    }



稍后,当我迭代向量时,其中的对象是SceneNode的实例,并因“纯虚函数”调用错误而失败:




能否请您帮忙,谢谢!

最佳答案

对于已销毁的对象,最常见的是“纯虚函数调用”错误。我注意到您正在抓住并持有一个指向node的指针,该指针具有局部作用域。如果您在函数退出后尝试通过children中的指针访问该对象,则会遇到此类错误。

关于c++ - std::vector保存基类实例,而不是派生类的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29181501/

10-09 03:44