C ++ вектор push_back с указателями - PullRequest
1 голос
/ 19 февраля 2012

Я пытаюсь разобраться в решении следующей проблемы.У меня есть следующая функция, которая принимает константную ссылку на объект.Что я хочу сделать, это дать хранилище, указатель на компонент объекта ссылается.Тем не менее, когда я вызываю storage.push_back (), изменения, на которые ссылается компонент объекта (его данные члена повреждены)

Я просто пытаюсь сохранить указатель на тот же компонент объекта, на который ссылается, а не изменить объектсовсем.

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

    auto *cpy = &component;

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

Почему приведенный выше код вообще изменяет объектный объект, на который ссылается компонент?

edit: Ok. Я отредактировал вектор, чтобы он содержал постоянные указатели.скриншоты, показывающие, что именно происходит.Здесь, в вызываемом объекте, если мы проверяем аргумент, который будет передан по ссылке, мы увидим, что элемент input_component не поврежден.enter image description here URL к изображению: http://i.imgur.com/lKpRm.png

Однако на втором изображении, сразу после перехода к указанному выше методу:

enter image description here URL к изображению: http://i.imgur.com/x0Vdn.png

У меня сложилось впечатление, что, проходя по константной ссылке, объекты не должны различаться внутри / снаружи функции.Я не понимаю, почему объект вообще будет изменен, если передан по константной ссылке.

1 Ответ

1 голос
/ 19 февраля 2012

Сначала запустите ваш код через valgrind и посмотрите, где на самом деле происходит повреждение. Установка указателя на массив не должна ничего делать с указанными данными.

...