作為 Unity 中編輯器補丁的一部分,我正在將以前的 Class 更改為 Struct。我已經閱讀了很多關于使用“不允許可變結構”的結構的建議,因為糟糕的復制行為會導致修改的副本,并且難以跟蹤。據我了解,這是基于堆疊且沒有資料開銷的結果。
但是,我想通過具體案例來澄清這一點。由于資料大小永遠不會改變,布林值是否可以在結構中發生變異?理論上,特定的布爾屬性可以隨頻率修改,所以如果它可能導致記憶體問題,我將不得不實作一些其他方法來跟蹤其他地方的引數。
額外說明,以防意外相關:
- 該類具有三個屬性,其中一個是布林值。
- 這兩個非布爾屬性是不可變的。
uj5u.com熱心網友回復:
資料大小的變化并不是結構不應該發生變異的原因。
主要原因是可變結構是按值而不是按參考復制的。典型的例子是使用結構體作為屬性:
myObject.MyStructProperty.MyBoolfield = true;
MyStructProperty將回傳一個副本,只有這個副本會被改變,而不是 myObject 中的實際欄位。
如果結構很小,只需創建一個副本,這是非常安全的,并且創建結構非常便宜。如果只有三個屬性,則很可能是這種情況。您對性能的擔憂很可能是沒有根據的,請始終在對性能做出假設之前進行衡量。
如果結構非常大,您可以允許突變,但您需要非常小心并在任何地方使用參考以避免復制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533268.html
