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)
当我们将另一个实例分配给对象时,当前正在使用的内存会发生什么.
objFoo 是一个变量,而不是一个对象.
objFoo = new Foo();创建一个新对象(new Foo())并将其分配给objFoo变量.
如果您调用objFoo = new Foo();并且没有其他变量引用同一个旧对象,则旧对象将有资格进行垃圾回收.
垃圾收集不会立即发生,但是当它发生时它将释放旧对象使用的内存.
有关垃圾回收的更多信息,请查看此MSDN参考.
将null分配给对象时,内存会发生什么.即.,objFoo = null
与我之前的笔记相同.如果没有其他变量引用旧对象,则该对象将有资格进行垃圾回收.
在第一种情况下,我可以访问新对象,在第二种情况下,访问值将给我空引用异常.
该变量 objFoo现在不引用任何内容,这就是当您尝试访问它引用的对象时获取异常的原因.