跳到內容

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 方法中可能引發的任何例外並釋放資源。

  • 在垃圾收集期間分配任何新的物件實例可能會導致未定義的行為,而且很可能會使您的程式崩潰。