【问题标题】:What does setting object to a null do?将对象设置为空有什么作用?
【发布时间】:2013-04-08 02:54:31
【问题描述】:

这行代码将堆上的内存空间分配给对象 foo

var foo =new object();

这行代码会释放它吗?

foo=null;

或者它只是清除对堆上内存位置的引用。

【问题讨论】:

标签: c#


【解决方案1】:

它只是删除了引用。当运行时认为合适时,对象本身会被垃圾收集,并且实际上与引用是否被擦除无关。

【讨论】:

    【解决方案2】:

    在 C# 中,所有对象都会被垃圾回收,您不能“删除”它们。

    当对给定对象的最后一个引用超出范围时,该对象可能会 收藏。您当然可以将尽可能多的引用归零,但是 只要 any 引用仍然持有该对象,该对象将保持活动状态 对象。

    所以设置 foo=null; 它只是删除引用。

    垃圾收集包括以下步骤:

    1. 垃圾收集器搜索托管对象 在托管代码中引用。
    2. 垃圾收集器尝试终结未完成的对象 参考。
    3. 垃圾收集器释放未被引用的对象,并且 恢复他们的记忆。

    了解垃圾收集器的工作原理很重要GC Class

    示例

    // Set a break-point here to see that foo = null. 
    // However, the compiler considers it "unassigned." 
    // and generates a compiler error if you try to 
    // use the variable.
    object foo;
    // Now foo has a value.
    foo = new object();
    // Set foo to null again. The object it referenced 
    // is no longer accessible and can now be garbage-collected.
    foo = null;
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2013-01-03
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多