対象:
CRuby
JRuby

クラスの終了処理(ファイナライザ)

ファイナライザを用いることによって、C++のデストラクタのようにクラスの終了処理を書くことができる。

ObjectSpace.define_finalizerメソッドでファイナライザを登録することができる。クラスではinitializeメソッドの中でこの処理を行う。

class FinalizerTest
  def finalize
    proc {
      print "finalize called\n"
    }
  end

  def wait
    print "wait 5 seconds ...\n"
    sleep 5
    print "done\n"
  end

  def initialize
    print "initialize called\n"
    ObjectSpace.define_finalizer(self, finalize)
  end
end

ft = FinalizerTest.new
ft.wait

これを実行するとFinalizerTestクラスのinitializeメソッドが呼ばれ、waitメソッドで5秒スリープした後、このオブジェクトがGCされるときにinitializeメソッドで登録したファイナライザが呼ばれている。

initialize called
wait 5 seconds ...
done
finalize called
(2010/03/29)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]