Maison > développement back-end > C++ > Pourquoi l'ajout d'une nouvelle valeur à une liste écrase-t-il les valeurs précédentes lors de l'utilisation de types référence ?

Pourquoi l'ajout d'une nouvelle valeur à une liste écrase-t-il les valeurs précédentes lors de l'utilisation de types référence ?

Mary-Kate Olsen
Libérer: 2025-01-19 20:40:13
original
581 Les gens l'ont consulté

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

Comprendre la liste Écrasements par les types de référence

Le code fourni démontre un piège courant lors de l'utilisation de types de référence avec des listes. La classe Tag, étant un type référence, signifie que les variables contiennent une référence à l'emplacement mémoire de l'objet, et non une copie de l'objet lui-même.

Au sein de la boucle, la même _tag instance est modifiée à plusieurs reprises. Chaque ajout à la liste ne crée pas un nouvel objet Tag ; à la place, il ajoute une autre référence au même _tag objet. Par conséquent, la liste finale contient plusieurs références pointant vers le dernier état modifié de _tag.

Pourquoi utiliser struct résout le problème

Changer public class Tag en public struct Tag résout le problème car les structures sont des types valeur. Lorsqu'une structure est attribuée, une copie des données de la structure est créée. Par conséquent, chaque itération de la boucle crée une instance _tag complètement indépendante. Les modifications apportées à une instance n'affectent pas les autres, ce qui donne lieu à une liste d'objets Tag uniques.

Pertinence des classes de collection dérivées

Le problème n'est pas inhérent à la conception de la TagCollection classe. La classe TagCollection elle-même semble correctement implémentée. Le problème principal réside dans la façon dont l'instance _tag est gérée dans la boucle qui remplit la liste, en particulier la modification répétée d'une seule instance de type référence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal