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