-1

c++/cli ファイナライザーからアンマネージ クラスのメモリをクリーンアップしようとしたところ、AcessViolation エラーが発生しました。私はこのようなことをします:

MyClass::!MyClass()
{

    if(_unmanaged)
    {
    _unmanaged->Delete();
    _unmanaged = 0;
    }
}

誰が知っていますか、何が問題なのですか?回答ありがとうございます。

4

1 に答える 1

0

わかりました、私は1つの推測を持っています。

ファイナライザーは独自のスレッドから動作するため、オブジェクトを手動で破棄しようとすると、競合状態が発生する可能性があります。

「すでに削除されたオブジェクト」についてのコメントを見ましたが、もう一度確認します。

MyClass::~MyClass()
{
   this->!MyClass();

   GC::KeepAlive(this);
}
于 2012-04-26T11:36:05.360 に答える