>백엔드 개발 >C++ >참조 유형을 사용할 때 목록에 새 값을 추가하면 이전 값을 덮어쓰는 이유는 무엇입니까?

참조 유형을 사용할 때 목록에 새 값을 추가하면 이전 값을 덮어쓰는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-19 20:40:13628검색

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 인스턴스가 생성됩니다. 한 인스턴스를 수정해도 다른 인스턴스에는 영향을 주지 않으므로 고유한 Tag 개체

가 포함된 목록이 생성됩니다.

파생 컬렉션 클래스 관련성

문제는 TagCollection 클래스 디자인에 고유한 것이 아닙니다. TagCollection 클래스 자체가 올바르게 구현된 것으로 보입니다. 핵심 문제는 목록을 채우는 루프 내에서 _tag 인스턴스가 처리되는 방식, 특히 단일 참조 유형 인스턴스의 반복 수정에 있습니다.

위 내용은 참조 유형을 사용할 때 목록에 새 값을 추가하면 이전 값을 덮어쓰는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.