1

我正在努力解决以下问题。我有以下函数,它接受对对象的 const 引用。我想做的是给存储,指向对象组件的指针正在引用。但是,当我调用 storage.push_back() 更改对象组件正在引用时(它的成员数据已损坏)

我只是想存储一个指向同一个对象组件的指针正在引用,根本不改变对象。

void InputSystem::RegisterInputAcceptingEntity(const PlayerInputComponent &component) {

    auto *cpy = &component;

    std::vector<const PlayerInputComponent*> storage;
    storage.push_back(cpy);
}

为什么上面的代码会改变对象组件的引用?

编辑:好的,我编辑了向量以包含常量指针。

以下是一些屏幕截图,准确显示了正在发生的事情。在被调用者中,如果我们检查将通过引用传递的参数,我们可以看到 input_component 成员没有损坏。 在此处输入图像描述 图片网址:http: //i.imgur.com/lKpRm.png

但是,在第二张图片中,就在进入上述方法之后:

在此处输入图像描述 图片网址:http: //i.imgur.com/x0Vdn.png

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

4

1 回答 1

1

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

于 2012-02-19T04:22:46.930 回答