首頁 > 後端開發 > C++ > 為什麼使用引用類型時向清單新增值會覆蓋先前的值?

為什麼使用引用類型時向清單新增值會覆蓋先前的值?

Mary-Kate Olsen
發布: 2025-01-19 20:40:13
原創
581 人瀏覽過

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

理解列表用引用型別覆蓋

提供的程式碼示範了將引用類型與清單一起使用時的常見陷阱。 Tag 類別是引用類型,表示變數保存對物件記憶體位置的 引用,而不是物件本身的副本。

在循環內,相同的_tag實例被重複修改。清單中的每次新增都不會建立新的 Tag 物件;相反,它新增了 same _tag 物件的另一個引用。 因此,最終清單包含多個指向 last 修改狀態 _tag.

的引用

為什麼要用struct可以解決問題

public class Tag 改為 public struct Tag 可以解決該問題,因為結構是值類型。 當分配一個結構體時,會建立該結構體資料的副本。 因此,循環的每次迭代都會建立一個完全獨立的 _tag 實例。對一個實例的修改不會影響其他實例,從而產生一個包含唯一 Tag 物件的清單。

派生集合類別相關性

問題並不是 TagCollection 類的設計所固有的。 TagCollection 類別本身似乎已正確實現。核心問題在於如何在填充清單的循環中處理 _tag 實例,特別是單一引用類型實例的重複修改。

以上是為什麼使用引用類型時向清單新增值會覆蓋先前的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板