请参阅的代码如下。该析构都永远不称为。任何人知道为什么以及如何这样可以纠正?

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),永远不会被收集。

虽然你可能期望将终结于静态的目的运行过程中被关闭,没有任何保证还有:

这不是一个析构函数。这是一个终结。这是一个不同的事情。其他两个都表示,因为这是一个静态的,它永远不会被收集,因此终结将永远不会运行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top