やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

組込ライブラリ(ObjectSpace::WeakMap)

 GC対象への弱参照をもつクラス。

成果物

情報源

ObjectSpace::WeakMap

GC の対象になるオブジェクトへの weak reference を持つクラスです。主に WeakRef クラスの内部で使用されるため、weakref ライブラリ経由で使用してください。

 当たり前のように弱参照について書いてあるが、あらためてググってみた。

弱参照とは、参照先のオブジェクトをガベージコレクタから守ることのできない参照のことである。

 新しいC/C++で聞いたことがある。ようするにGCで回収されやすくする。循環参照を避ける。といった狙いがある。

メンバ抜粋

[] []=

[], []=

weak_map = ObjectSpace::WeakMap.new
key = "text"
p key.object_id #=> 36

weak_map[key] = "test" # => test
p weak_map[key] # => test
p weak_map[key].object_id #=> 48

 keyweak_map[key]はおなじオブジェクトを返すかと思ったが、IDが違う。どゆこと? 弱参照だからWeakRefとかいう別クラスが仲介しているのかな?

所感

 知らなくていいんじゃないかな?

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux