私は次の問題を解決することに頭を悩ませようとしています。オブジェクトへのconst参照を受け入れる次の関数があります。私がやりたいのは、ストレージを提供することです。オブジェクトコンポーネントへのポインタが参照しています。ただし、storage.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
ただし、2番目の画像では、上記の方法にステップインした直後に次のようになります。
画像へのURL:http: //i.imgur.com/x0Vdn.png
const参照を渡すと、関数の内部と外部でオブジェクトが異なる方法はないはずだという印象を受けました。const参照によって渡された場合、オブジェクトが変更される理由がわかりません。