読者です 読者をやめる 読者になる 読者になる

ObjectSpace.define_finalizer

Ruby

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