21

マネージ C++ (.NET 2.0) で IDisposable オブジェクト (FileStream^ fs) を破棄しようとしていますが、エラーが発生しています

Dispose' : 'System::IO::FileStream のメンバーではありません

代わりにデストラクタを呼び出す必要があると書かれています。呼び出します

fs->~FileStream();

FileStream オブジェクトで dispose メソッドを呼び出しますか? Dispose を呼び出せないのはなぜですか?

4

1 に答える 1

31

正しいパターンは、オブジェクトを削除することです:

delete fs;

これは Dispose() の呼び出しに変換されます。

ボンネットの下で何が起こっているかの詳細については、この投稿を参照してください。このイディオムの利点は、次のように記述できることです。

{
  FileStream fs(...)
  ...
}

そして、Dispose メソッドを正しく呼び出します... C# の using ブロックに相当します。ファイル ストリーム オブジェクトは引き続きマネージ ヒープに割り当てられます。

于 2008-12-08T16:29:36.290 に答える