2012-02-19 130 views
1

我想解决以下问题。我有以下函数接受一个对象的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成员没有被损坏。 enter image description here URL图像:http://i.imgur.com/lKpRm.png

然而,在第二图像,刚刚步入上面说的方法后:

enter image description here URL图像:http://i.imgur.com/x0Vdn.png

我一直的印象那通过const引用传递,应该没有办法使对象在函数内部/外部不同。我不明白为什么对象会被改变,如果通过const引用传递的话。

+4

数据损坏的问题很可能是调用者。但是这段代码滥用了'const_cast'。为什么参数是'const'? – 2012-02-19 03:55:06

+0

你可能应该有一个'vector ',或者重新考虑你的常量需求......另外,在'&'上面'std :: addressof(component)'更好。 – 2012-02-19 04:00:14

+0

据我所知,腐败只发生在push_back()(vs2011测试版的调试工具)的位置。该对象被设为const以防止该函数改变引用的对象组件。 – Short 2012-02-19 04:05:14

回答

1

首先,通过valgrind运行您的代码并查看实际发生损坏的位置。将指针放到数组上不应该对所指向的数据做任何事情。