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)