代码之家  ›  专栏  ›  技术社区  ›  0xDEAD BEEF

垃圾收集器交叉引用

  •  2
  • 0xDEAD BEEF  · 技术社区  · 14 年前

    垃圾收集器将释放交叉引用的对象/类的资源,该对象/类不再从主程序引用。

    class class1
    {
        class2 m_RefClass2;
    }
    class class2
    {
        class1 m_RefClass1;
    }
    
    class class3
    {
        public class3()
        {
            class1 obj1 = new class1();
            class2 obj2 = new class2();
            obj1.m_RefClass2 = obj2;
            obj2.m_RefClass1 = obj1;
        }
    }
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Adam Robinson    14 年前

    对。NET垃圾收集器并不是简单地计算引用数(在这种情况下,这样的安排将导致两个类保持彼此的活动状态)。任何不是“根对象”(意味着没有从GC根对象到对象的引用路径)的对象都可以进行收集。