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 回答