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メンバーが破損していないことがわかります。 ここに画像の説明を入力してください 画像へのURL:http: //i.imgur.com/lKpRm.png

ただし、2番目の画像では、上記の方法にステップインした直後に次のようになります。

ここに画像の説明を入力してください 画像へのURL:http: //i.imgur.com/x0Vdn.png

const参照を渡すと、関数の内部と外部でオブジェクトが異なる方法はないはずだという印象を受けました。const参照によって渡された場合、オブジェクトが変更される理由がわかりません。

4

1 に答える 1

1

まず、コードをvalgrindで実行し、破損が実際に発生している場所を確認します。ポインタを配列にプッシュしても、ポイントされているデータには何の影響もありません。

于 2012-02-19T04:22:46.930 に答える