静态的实例,desctructor从来没有所谓
-
22-08-2019 - |
题
请参阅的代码如下。该析构都永远不称为。任何人知道为什么以及如何这样可以纠正?
public partial class Form1 : Form
{
private Goo goo;
public Form1()
{
InitializeComponent();
goo = Goo.GetInstance();
}
}
public class Goo
{
private foo f = new foo();
private static Goo goo;
private Goo()
{}
public static Goo GetInstance()
{
if(goo!=null)
{
goo = new Goo();
}
return goo;
}
~Goo()
{
}
}
class foo
{
~foo()
{
}
}
解决方案
由静态字段引用的对象不是简单地完成,除非你清楚(设置为null
)域 - 甚至然后它是非确定性的和不能保证。静态字段算作根对象。
在(为什么),你希望它可以收集/敲定?它仍然是访问...
其他提示
由静态字段引用的对象总是可到达的(假设没有类卸载或任何其他GC funkiness),永远不会被收集。
虽然你可能期望将终结于静态的目的运行过程中被关闭,没有任何保证还有:
- http://blogs.msdn.com/cbrumme/archive/2004/02/20/77460.aspx (看一部分题为"V1&V1。1最后确定的保障").我不知道该如何多的这种已经改变。网2.0或以后。
这不是一个析构函数。这是一个终结。这是一个不同的事情。其他两个都表示,因为这是一个静态的,它永远不会被收集,因此终结将永远不会运行。
不隶属于 StackOverflow