2017-07-05 14 views
-2

我一直在編程一段時間今天,我想我需要休息,因爲我似乎無法想象這個非常簡單的事情。一個幫助將不勝感激。內存中的C#成員數組內存#

我有一個類(實際上是Form1),並且有一個成員數組int[,]f。 現在我不管理它的內存,然後(也許我應該?)。 相反的另一種方法,我調用一個函數說:

myFunction(f,.....); 

這個功能就像是

void myFunction(int[,] f, ...some other arguments) 
{//.... 
    f= new int[NX,NY]; 
//.... 
} 

正如你所看到的,我爲數組F中的函數內部獨立的內存。

現在我的問題是......當我離開myFunction時,這個內存是否會被垃圾收集?

+1

它與'C++'有什麼關係? – iehrlich

回答

0

首先,你必須瞭解一些非常重要的事情:

垃圾收集發生隨機。

其次,

只有不變量指他們有資格獲得GC

第三的那些對象,

f= new int[NX,NY]; 

您正在f指什麼其他。原始f仍由Form1.f引用。但是這個new int[NX, NY]對象現在被創建,並且只能由該方法中的本地f引用。

該方法返回後,沒有什麼應該引用新的f(除非您將它分配到別的地方),所以新的f有資格使用GC。請注意,我說「變得符合GC」而不是「垃圾收集」。

但是,由於Form1仍然保留對原始f的引用,原始f將不會在表單執行前變爲符合GC條件(除非將其設置爲其他內容)。

+0

因此函數中的f和它管理的內存不會引用Form1.f?他們是否複製? (我認爲他們是通過指針的方式) – KansaiRobot

+1

是的,你首先通過指針,直到你做'f = new ...'。此時,方法中的「f」引用其他內容,而「Form1.f」的值不會更改。 @KansaiRobot – Sweeper