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
中找到。
注意事項:
-
只有在透過
initialize
方法完整初始化物件後,才會調用finalize
方法。如果initialize
方法內部引發例外,則不會調用finalize
。如果您的類別定義了finalize
方法,請務必捕獲在initialize
方法中可能引發的任何例外並釋放資源。 -
在垃圾收集期間分配任何新的物件實例可能會導致未定義的行為,而且很可能會使您的程式崩潰。