質問

以下のコードを参照してください。デストラクターは決して呼び出されません。これがなぜ、そしてどのように修正できるのか知っている人はいますか?

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を想定していない)に到達可能であり、収集されません。

プロセスのシャットダウン時に静的オブジェクトのファイナライザーが実行されることが期待される場合でも、その保証はありません。

これはデストラクタはありません。それはファイナライザです。それは別のことです。他の2つは、これは静的なので、それが収集されることはありません、と述べてきたように、それゆえ、ファイナライザが実行されることはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top