2010-05-05 60 views
2

交叉引用對象/類的垃圾收集器可用資源,不再從主程序引用。 例如 -C#垃圾收集器交叉引用

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

它被稱爲「循環參考」,谷歌好。第一擊:http://stackoverflow.com/questions/400706/circular-references-cause-memory-leak – 2010-05-05 18:40:27

回答

6

是的。 .NET垃圾收集器不僅僅是對引用進行計數(在這種情況下,這種安排會導致兩個類彼此保持聯繫)。任何不「根」的對象(意味着沒有從GC根對象到對象的引用路徑)符合收集條件。

+0

打我16秒 – 2010-05-05 17:50:36

+1

如果我有一個鎳每次我聽說過! – 2010-05-05 17:51:08

+0

THNX!還有一件事 - GC何時決定釋放這些資源?它是否會出現突變或罕見(如關閉程序時) – 2010-05-05 18:54:08