首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使IDispose::Dispose()私有

使IDispose::Dispose()私有
EN

Stack Overflow用户
提问于 2015-10-08 16:57:01
回答 1查看 98关注 0票数 0

我有一个包含文件流的对象。文件流将在对象的生存期内打开。当对象没有更多引用时,我希望文件流关闭,但在此之前从来没有。如果在对象上调用Dispose(),则释放该文件,但该对象可能仍然具有引用。在此之后调用其他方法是不安全的,因为文件已经被释放了,所以我需要在每个方法的开头实现检查,以确保该文件仍然有效(浪费运行时间)。

看起来,使MUST ()私有可能解决了这个问题,但我同样理解,当对象没有更多引用时,可能不会立即调用析构函数--因此,基本上,我必须公开一个MUST()方法,以便调用者进行自己的清理。难道这不就是“智能”内存管理的目的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 17:05:23

如果没有对对象的引用,它将与内部文件流一起被垃圾收集。在GC期间,将执行文件流终结器并关闭文件。您不需要Dispose()来实现它。问题是你不知道GC什么时候会运行。您的对象似乎有很长的生存期,所以它可能在生成 2中,可能需要很长时间才能运行GEN2GC。

您应该在每次调用之前实现IDisposable并检查对象的状态。如果已释放该对象,则抛出ObjectDisposedException

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33021768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档