我不太理解为什么像Java和C#这样的语言中会有终结器。据我所知,它们:
- 无法保证运行(在Java中)
- 如果它们确实运行,可能会在相关对象成为终结候选对象之后的任意时间运行
- 而且(至少在Java中),为了将其附加到类上,它们会产生非常大的性能损失。
那么它们到底是为什么而添加进来的呢?我问了一个朋友,他咕哝着说“您希望拥有每一个清除诸如DB连接等东西的可能机会”,但我认为这是一种不好的做法。为什么您要依赖具有上述特性的东西来进行任何事情,甚至是最后的防线?特别是当如果任何API中都设计了类似的东西,该API就会被嘲笑而不存在。
try { .. } finally { .. }
块在 Java 中负责实现类似析构函数的行为。 - PP.