Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Weak Reference class that allows a referenced object to be garbage-collected. A WeakRef may be used exactly like the object it references.
Usage:
foo = Object.new foo = Object.new p foo.to_s # original's class foo = WeakRef.new(foo) p foo.to_s # should be same class ObjectSpace.garbage_collect p foo.to_s # should raise exception (recycled)
Creates a weak reference to orig
# File weakref.rb, line 51
def initialize(orig)
@__id = orig.object_id
ObjectSpace.define_finalizer orig, @@final
ObjectSpace.define_finalizer self, @@final
@@mutex.synchronize {
@@id_map[@__id] = [] unless @@id_map[@__id]
}
@@id_map[@__id].push self.object_id
@@id_rev_map[self.object_id] = @__id
super
end