2017-07-05 12 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