我对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/