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
メソッドで発生する可能性のある例外をキャッチし、リソースを解放するようにしてください。 -
ガーベジコレクション中に新しいオブジェクトインスタンスを割り当てると、未定義の動作が発生し、プログラムがクラッシュする可能性が非常に高くなります。