ObjectSpace.define_finalizer

DBを閉じるetcがきちんとされることを保証したいが、RubyにはC++っぽいデストラクタがあるのかよく分からなかったので調べてみた。こんな感じで、できるっぽい。

class Bar
  attr_accessor :hoge
  def Bar.callback(file)
    proc {
      puts "bar"
      puts file
    }
  end
  def initialize
    @hoge = "aaaa"
    ObjectSpace.define_finalizer(self, Bar.callback(@hoge))
  end
end

Bar.new
GC.start

わーい。

/Users/syou6162/ruby% ruby gc.rb
bar
aaaa