finalize¶
もしクラスに finalize メソッドが定義されていた場合、そのクラスのインスタンスがガベージコレクトされるときにそのメソッドが呼び出されます。
class Foo
def finalize
# Foo がガベージコレクトされるときに呼び出される
# 管理されていないリソースを解放するのに使う (例:C ライブラリ、構造体)
end
end
外部ライブラリによって確保された、Crystalのガベージコレクタによって直接管理されていないリソースを解放するためにこのメソッドは使ってください。
例えばIO::FileDescriptor#finalize
やOpenSSL::Digest#finalizeなどで実際に利用されています。
注意:
finalizeメソッドが呼び出さされるのは、オブジェクトがinitializeメソッド経由で完全に初期化されていた場合に限ります。もし例外がinitializeメソッド中で発生したとき、finalizeは呼び出されません。もしクラスにfinalizeメソッドを定義する場合は、必ずinitializeメソッドで発生し得る例外を捕捉して、リソースの解放をするようにしてください。
- ガベージコレクション中に新規に確保されたオブジェクトに対する挙動は未定義で、恐らくその場合プログラムはクラッシュします。