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
Lepaskan: 2025-01-19 20:40:13
asal
626 orang telah melayarinya

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan