finalize¶
如果一个类定义了 finalize
方法,那么当该类的实例被垃圾回收时,该方法将被调用。
class Foo
def finalize
# Invoked when Foo is garbage-collected
# Use to release non-managed resources (ie. C libraries, structs)
end
end
使用此方法释放由 Crystal 垃圾回收器无法直接管理的外部库分配的资源。
您可以在 IO::FileDescriptor#finalize
或 OpenSSL::Digest#finalize
中找到此方法的示例。
备注:
-
只有当对象通过
initialize
方法完全初始化后,finalize
方法才会被调用。如果在initialize
方法内部抛出异常,则不会调用finalize
。如果您的类定义了finalize
方法,请务必捕获initialize
方法中可能抛出的任何异常并释放资源。 -
在垃圾回收期间分配任何新的对象实例可能会导致未定义的行为,并且最有可能导致您的程序崩溃。