如何在托管C++中处理可处理对象(IDisposable)?

21
我正在尝试在托管的C++(.NET 2.0)中处理一个IDisposable对象(FileStream^ fs),但是收到错误消息:“Dispose' : is not a member of 'System::IO::FileStream”。它表示我应该调用析构函数。那么调用析构函数会怎样?
fs->~FileStream();

在FileStream对象上调用dispose方法?为什么我不能调用Dispose?


我也遇到了这个问题,谢谢你的提问。 - demoncodemonkey
1个回答

32

正确的模式是只需删除该对象:

delete fs;

这将被翻译成对Dispose()的调用。

参见此文章了解一些底层细节。这种惯用法的优点是,它允许你编写:

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

正确调用Dispose方法,相当于在C#中使用using块。文件流对象仍然分配在托管堆上。


更好的是,它可以自动地通过使用堆栈样式语义定义的成员进行链接。 - morechilli
3
忘记了这一点并再次使用了这个答案。我希望我能够两次接受/投票赞成! - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接