手册说
The destructor method will be called as soon as all references to a
particular object are removed or when the object is explicitly
destroyed or in any order in shutdown sequence.
析构函数与释放内存没有任何关系 – 相反,它是一个“钩子”,允许在对象符合回收条件时运行自定义代码.也就是说,它与构造函数相反 – 构造函数不分配内存(因为在调用构造函数之前由GC完成)因此析构函数不会释放内存(因为这将由GC完成)然后).
虽然GC可以很好地管理本机资源(例如其他对象和对象图),但是诸如文件句柄之类的外部资源仍然必须“手动处理”.例如,假设一个MyFile类,析构函数将确保文件(如果打开)将被关闭 – 虽然可以说“更好”使它成为对对象调用Close / Dispose操作的要求,析构函数可以是在这种情况下用作后退机制.
我会反对使用GC语言中的析构函数的一般用法.他们可以引入一些微妙的问题,例如明显的非确定性和意外保持对象存活的能力 – 即使在使用引用计数的PHP等语言中也是如此. (Java / JVM和.NET模型使用的终结器更加挑剔.)
快乐的编码.