QA@IT
«回答へ戻る

edit

2024
 bar
 ```
 
-最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。ということは、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)
+最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。なんとなく、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)
 
 回答になってなくて申し訳ないですが、どなたか詳しい人の意見を聞いてみたいです。

ちょっと追試してみましたが、面白い結果になりました。

#!/usr/bin/env ruby

class Bar
  def self.finalize
    proc { puts 'bar' }
  end

  def initialize
    ObjectSpace.define_finalizer(self, self.class.finalize)
  end
end

at_exit { puts 'at_exit' }

3.times.each do
  Bar.new
end

GC.start

で結果が

bar
bar
at_exit
bar

最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。なんとなく、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)

回答になってなくて申し訳ないですが、どなたか詳しい人の意見を聞いてみたいです。

ちょっと追試してみましたが、面白い結果になりました。

```ruby
#!/usr/bin/env ruby

class Bar
  def self.finalize
    proc { puts 'bar' }
  end

  def initialize
    ObjectSpace.define_finalizer(self, self.class.finalize)
  end
end

at_exit { puts 'at_exit' }

3.times.each do
  Bar.new
end

GC.start
```

で結果が

```
bar
bar
at_exit
bar
```

最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。なんとなく、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)

回答になってなくて申し訳ないですが、どなたか詳しい人の意見を聞いてみたいです。

回答を投稿

ちょっと追試してみましたが、面白い結果になりました。

#!/usr/bin/env ruby

class Bar
  def self.finalize
    proc { puts 'bar' }
  end

  def initialize
    ObjectSpace.define_finalizer(self, self.class.finalize)
  end
end

at_exit { puts 'at_exit' }

3.times.each do
  Bar.new
end

GC.start

で結果が

bar
bar
at_exit
bar

最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。ということは、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)

回答になってなくて申し訳ないですが、どなたか詳しい人の意見を聞いてみたいです。

ちょっと追試してみましたが、面白い結果になりました。

```ruby
#!/usr/bin/env ruby

class Bar
  def self.finalize
    proc { puts 'bar' }
  end

  def initialize
    ObjectSpace.define_finalizer(self, self.class.finalize)
  end
end

at_exit { puts 'at_exit' }

3.times.each do
  Bar.new
end

GC.start
```

で結果が

```
bar
bar
at_exit
bar
```

最後の一個だけ、GCで消されずに残っていました。回数を変えても同じで、最後の一個だけ残ります。ということは、意図的にそういう挙動をしているように見えます。(これがTOPLEVEL_BINDING固有なのかどうかまでは追ってないのでわかりません)

回答になってなくて申し訳ないですが、どなたか詳しい人の意見を聞いてみたいです。