垃圾收集的面向对象编程语言会自动回收未使用的内存,但所有其他类型的资源(即文件、套接字......)仍然需要手动释放,因为无法信任终结器及时(或根本不)运行。
因此,此类资源对象通常提供某种“关闭”或“处置”方法/模式,由于多种原因,这可能会产生问题:
- 必须手动调用Dispose,这可能会在不清楚何时必须释放资源的情况下造成问题(与手动内存管理类似的问题)
- 一次性模式有点“病毒式”,因为每个包含一次性资源的类也必须是一次性的,以保证正确的资源清理
- 向类添加一次性成员,要求类也成为一次性成员,改变了类的接口和使用模式,从而破坏了封装
- 一次性模式会产生继承问题,即派生类是一次性的,而基类不是
那么,是否有任何替代概念/方法可以正确释放此类资源?有这方面的论文/研究吗?