重新分配对象时会发生什么?

suj*_*lil -4 .net c# memory class object

使用以下实例化对象时:

Foo objFoo = new Foo();
Run Code Online (Sandbox Code Playgroud)

objFoo重新分配它的引用时,它的内存分配会发生什么?

objFoo = new Foo();
Run Code Online (Sandbox Code Playgroud)

分配给null时怎么办?

objFoo = null
Run Code Online (Sandbox Code Playgroud)

Yac*_*sad 5

当我们将另一个实例分配给对象时,当前正在使用的内存会发生什么.

objFoo 是一个变量,而不是一个对象.

objFoo = new Foo();创建一个新对象(new Foo())并将其分配给objFoo变量.

如果您调用objFoo = new Foo();并且没有其他变量引用同一个旧对象,则旧对象将有资格进行垃圾回收.

垃圾收集不会立即发生,但是当它发生时它将释放旧对象使用的内存.

有关垃圾回收的更多信息,请查看此MSDN参考.

将null分配给对象时,内存会发生什么.即.,objFoo = null

与我之前的笔记相同.如果没有其他变量引用旧对象,则该对象将有资格进行垃圾回收.

在第一种情况下,我可以访问新对象,在第二种情况下,访问值将给我空引用异常.

变量 objFoo现在不引用任何内容,这就是当您尝试访问它引用的对象时获取异常的原因.

  • 虽然不适用于示例类,但重要的是要注意垃圾收集只会自动处理托管内存,如果您的类包含非托管内存(句柄,流,打开文件等),那么您将需要实现[IDisposable] ](https://msdn.microsoft.com/en-us/library/system.idisposable(v = vs.110).aspx)接口以正确释放内存. (2认同)