考虑 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;
}
问题:当执行超出此范围时,是否会对任一实例进行垃圾收集,因为仍然存在对它们中的每一个的引用,由另一个持有?
考虑 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;
}
问题:当执行超出此范围时,是否会对任一实例进行垃圾收集,因为仍然存在对它们中的每一个的引用,由另一个持有?
是的,他们都会。GC 遍历依赖关系树,发现程序的任何其他部分都无法访问它们,并将正确处理它们。
这是一篇很好的 MSFT 文章:http: //msdn.microsoft.com/en-us/magazine/bb985010.aspx
是的,它们将被垃圾收集。 循环引用导致内存泄漏?