跳至内容

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#finalizeOpenSSL::Digest#finalize 中找到此方法的示例。

备注:

  • 只有当对象通过 initialize 方法完全初始化后,finalize 方法才会被调用。如果在 initialize 方法内部抛出异常,则不会调用 finalize。如果您的类定义了 finalize 方法,请务必捕获 initialize 方法中可能抛出的任何异常并释放资源。

  • 在垃圾回收期间分配任何新的对象实例可能会导致未定义的行为,并且最有可能导致您的程序崩溃。