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