gpt4 book ai didi

c# - 在什么情况下,引用会指向排队等待垃圾回收的对象?

转载 作者:太空狗 更新时间:2023-10-29 19:53:58 26 4
gpt4 key购买 nike

我正在阅读有关 Dispose() 和 ~finalize 以及何时使用哪个的 C# 主题。作者认为你不应该在你的 ~finalize 中使用引用,因为你引用的对象可能已经被收集了。具体说明的例子是,“..你有两个对象,它们相互引用。如果对象#1 首先被收集,那么对象#2 对它的引用指向一个不再存在的对象。”

在什么情况下,一个对象的实例会处于一种状态,即它在内存中引用了一个正在被 GC 处理的对象?我的猜测是至少有两种不同的场景,一种是对象引用指向一个对象,另一种是对象引用指向另一个对象引用(例如,当它在方法中由 ref 传递时)。

最佳答案

您可以拥有相互引用的对象,并且整个集合都符合 GC 的条件。


这是一个简单的代码示例:

class Test { 
public Test Other { get; set;}

static void Main()
{
Test one = new Test();
Test two = new Test { Other = one; }
one.Other = two;

one = null;
two = null
// Both one and two still reference each other, but are now eligible for GC
}
}

关于c# - 在什么情况下,引用会指向排队等待垃圾回收的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com