Rumah >pembangunan bahagian belakang >C++ >Mengapa Menambah Nilai Baharu pada Senarai Mengganti Nilai Sebelumnya Apabila Menggunakan Jenis Rujukan?

Mengapa Menambah Nilai Baharu pada Senarai Mengganti Nilai Sebelumnya Apabila Menggunakan Jenis Rujukan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-19 20:40:13628semak imbas

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

Senarai Pemahaman Tulis Ganti dengan Jenis Rujukan

Kod yang disediakan menunjukkan perangkap biasa apabila menggunakan jenis rujukan dengan senarai. Kelas Tag, sebagai jenis rujukan, bermakna pembolehubah memegang rujukan kepada lokasi memori objek, bukan salinan objek itu sendiri.

Dalam gelung, tika _tag yang sama berulang kali diubah suai. Setiap penambahan pada senarai tidak mencipta objek Tag baharu; sebaliknya, ia menambah rujukan lain pada objek sama _tag. Oleh itu, senarai akhir mengandungi berbilang rujukan yang menunjuk kepada terakhir keadaan diubah suai _tag.

Mengapa Menggunakan struct Menyelesaikan Masalah

Menukar public class Tag kepada public struct Tag menyelesaikan isu kerana struct ialah jenis nilai. Apabila struct diberikan, salinan data struct dibuat. Akibatnya, setiap lelaran gelung mencipta contoh _tag bebas sepenuhnya. Pengubahsuaian pada satu kejadian tidak menjejaskan yang lain, menghasilkan senarai dengan objek Tag unik.

Perkaitan Kelas Koleksi Terbitan

Masalahnya tidak wujud dalam reka bentuk kelas TagCollection. Kelas TagCollection itu sendiri kelihatan dilaksanakan dengan betul. Isu teras terletak pada cara contoh _tag dikendalikan dalam gelung yang mengisi senarai, khususnya pengubahsuaian berulang bagi satu contoh jenis rujukan.

Atas ialah kandungan terperinci Mengapa Menambah Nilai Baharu pada Senarai Mengganti Nilai Sebelumnya Apabila Menggunakan Jenis Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn