考虑C#中的以下类:
class A
{
public B b;
}
class B
{
public A a;
}
随后:
{
A a = new A();
B b = new B();
a.b = b;
b.a = a;
}
问题: 如果执行超出了这个范围,那么任何一个实例都会被垃圾收集,因为它们仍然存在对每个实例的引用,由另一个持有吗?
答案 0 :(得分:4)
是的,他们俩都会。 GC遍历依赖关系树,看到程序的任何其他部分都无法访问它们,并且会正确处理它们。
这是一篇很好的MSFT文章:http://msdn.microsoft.com/en-us/magazine/bb985010.aspx
答案 1 :(得分:1)
是的,他们将被垃圾收集。 Circular References Cause Memory Leak?