ホームページ > バックエンド開発 > C++ > 参照型を使用する場合、リストに新しい値を追加すると以前の値が上書きされるのはなぜですか?

参照型を使用する場合、リストに新しい値を追加すると以前の値が上書きされるのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-19 20:40:13
オリジナル
626 人が閲覧しました

Why Does Adding a New Value to a List Overwrite Previous Values When Using Reference Types?

リストについて 参照型による上書き

提供されたコードは、リストで参照型を使用するときによくある落とし穴を示しています。 Tag クラスは参照型であるため、変数はオブジェクト自体のコピーではなく、オブジェクトのメモリ位置への 参照 を保持します。

ループ内では、同じ _tag インスタンスが繰り返し変更されます。リストに追加するたびに、新しい Tag オブジェクトは作成されません。代わりに、同じ _tag オブジェクトに別の参照を追加します。 したがって、最後のリストには、._tag最後に変更された状態

を指す複数の参照が含まれています。

struct を使用すると問題が解決する理由

構造体は値型であるため、public class Tagpublic struct Tag に変更すると問題が解決します。 構造体が割り当てられると、構造体のデータのコピーが作成されます。 その結果、ループの各反復により、完全に独立した _tag インスタンスが作成されます。 1 つのインスタンスを変更しても他のインスタンスには影響しないため、一意の Tag オブジェクトを含むリストが作成されます。

派生コレクション クラスの関連性

この問題は、TagCollection クラスの設計に固有のものではありません。 TagCollection クラス自体は正しく実装されているようです。中心的な問題は、リストに値を設定するループ内で _tag インスタンスがどのように処理されるか、特に単一の参照型インスタンスの繰り返し変更がどのように処理されるかにあります。

以上が参照型を使用する場合、リストに新しい値を追加すると以前の値が上書きされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート