2017-08-04 23 views
0

假設我有一個來自遊戲的更新循環,並且每個循環都從類函數中輸出一個新列表並將其分配給'myList'。來自以前更新功能的列表會發生什麼?我必須擔心嗎?列表每個循環的前一個實例會發生什麼?

//someClass 
List<T> GetList() 
{ 
    List<T> l = new List<T>(); // I create a new list here 
    //populate the list..... 
    return l; 
} 

------------------ 
void Update() 
{ 
    //game update loop 
    List<T> myList = someClass.GetList(); 
    //what happens to the previous instance of list created? 
} 
+0

以前的例子是什麼? –

+1

[垃圾收集](https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/) – dasblinkenlight

回答

1

列表是引用類型。當你做這樣的事情:

List<T> l = new List<T>(); 

new List<T>()創建一個列表對象。 l擁有對該對象的引用。當你創建另一個列表對象並將其分配給l

l = new List<T>(); 

這些事情發生:

  • 原始對象不被破壞
  • 創建一個新的列表對象
  • l現在店對新對象的引用

有些ot她的代碼中的變量可能仍然是指原始列表對象。如果不是,那麼會發生以下情況。

原始列表對象現在有資格進行垃圾回收。垃圾收集器將在某個不確定的時間點釋放這塊內存。

注意:

重新讀取您的代碼後。我發現你的代碼並沒有真正做你所描述的。您只創建了列表的一個實例。這意味着在您的代碼中,實例將被l引用,因此不會被垃圾收集。

+0

不要從Update函數創建列表的多個實例嗎?由於每次循環都調用GetList(),所以會創建一個新列表。 – Uyet123

相關問題