コンテンツへスキップ

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 で見つけることができます。

注意:

  • finalize メソッドは、initialize メソッドを介してオブジェクトが完全に初期化された後にのみ呼び出されます。initialize メソッド内で例外が発生した場合、finalize は呼び出されません。クラスが finalize メソッドを定義している場合、initialize メソッドで発生する可能性のある例外をキャッチし、リソースを解放するようにしてください。

  • ガーベジコレクション中に新しいオブジェクトインスタンスを割り当てると、未定義の動作が発生し、プログラムがクラッシュする可能性が非常に高くなります。