c + +指针的向量push_back
问题描述:
我想解决以下问题。我有以下函数接受一个对象的const引用。我想要做的是给存储,一个指向对象组件的指针。然而,当我调用storage.push_back()更改对象组件引用(它的成员数据被损坏)c + +指针的向量push_back
我只是试图存储一个指向同一个对象组件的指针,而不是改变对象。
void InputSystem::RegisterInputAcceptingEntity(const PlayerInputComponent &component) {
auto *cpy = &component;
std::vector<const PlayerInputComponent*> storage;
storage.push_back(cpy);
}
为什么上面的代码完全改变了对象组件的引用?
编辑:好吧我编辑的矢量包含常量指针。
下面是一些截图,显示正在发生的事情。在被调用者中,如果我们检查将通过引用传递的参数,我们可以看到input_component成员没有被损坏。 URL图像:http://i.imgur.com/lKpRm.png
然而,在第二图像,刚刚步入上面说的方法后:
URL图像:http://i.imgur.com/x0Vdn.png
我一直的印象那通过const引用传递,应该没有办法使对象在函数内部/外部不同。我不明白为什么对象会被改变,如果通过const引用传递的话。
数据损坏的问题很可能是调用者。但是这段代码滥用了'const_cast'。为什么参数是'const'? – 2012-02-19 03:55:06
你可能应该有一个'vector',或者重新考虑你的常量需求......另外,在'&'上面'std :: addressof(component)'更好。 –
2012-02-19 04:00:14
据我所知,腐败只发生在push_back()(vs2011测试版的调试工具)的位置。该对象被设为const以防止该函数改变引用的对象组件。 – Short 2012-02-19 04:05:14