2

垃圾收集的面向对象编程语言会自动回收未使用的内存,但所有其他类型的资源(即文件、套接字......)仍然需要手动释放,因为无法信任终结器及时(或根本不)运行。

因此,此类资源对象通常提供某种“关闭”“处置”方法/模式,由于多种原因,这可能会产生问题:

  • 必须手动调用Dispose,这可能会在不清楚何时必须释放资源的情况下造成问题(与手动内存管理类似的问题)
  • 一次性模式有点“病毒式”,因为每个包含一次性资源的类也必须是一次性的,以保证正确的资源清理
  • 向类添加一次性成员,要求类也成为一次性成员,改变了类的接口和使用模式,从而破坏了封装
  • 一次性模式会产生继承问题,即派生类是一次性的,而基类不是

那么,是否有任何替代概念/方法可以正确释放此类资源?有这方面的论文/研究吗?

4

1 回答 1

-2

一种方法(在支持它的语言中)是手动触发垃圾收集事件以使终结器运行。但是,某些语言(如 Java)并没有为此提供可靠的机制。

于 2013-11-10T20:40:38.750 回答