构造函数是一个特殊方法,在创建对象时运行,用于初始化其状态至有效的初始条件。析构函数(或终结器)在对象被销毁时运行,用于清理资源。
构造
java
{
String host;
{
(host == )
();
.host = host;
}
}
好的构造函数确保对象永远不会处于无效状态。
class FileWriter:
def __init__(self, path):
self.f = open(path, "w") # acquire resource
def close(self):
self.f.close() # explicit cleanup
def __enter__(self): return self
def __exit__(self, *a): self.close() # deterministic cleanup
with FileWriter("out.txt") as w: # closed automatically at block end
pass
| Language | Cleanup mechanism |
|---|---|
| C++ | 析构函数 ~T(),确定性运行 |
| Java/C# | GC + finalize/Dispose(非确定性;使用 try-with-resources / using) |
| Python | __del__(不可靠的时序);优先使用上下文管理器 |
在垃圾回收语言中,永远不要依赖终结器来释放文件、套接字或锁 — 它们的运行时间是不确定的。使用显式的 close/Dispose/上下文管理器。
构造函数是每个对象都以有效状态开始的保证 — 强制必需参数和不变量的最佳位置。
清理很重要,因为有限资源(文件句柄、连接)如果未释放就会泄漏,而依赖垃圾回收来处理它们会导致间歇性、难以调试的资源耗尽。