原です。 > 青山です。 > $ ruby -e ' > class Test > TheArray = [] > end > class YaArray > def initialize; @BaArray = Test::TheArray; end > def push(x); @BaArray.push x; end > def e(i); @BaArray[i]; end > end > Proc.new { > foo = YaArray.new > # この段階で、Test::TheArray の参照していた [] を foo も参照。 > class Test > remove_const(:TheArray) > end > #p Test::TheArray # ==> uninitialized constant Test::TheArray (NameError) > # [] を参照していた Test::TheArray が無くなっても、foo が参照してい > # るので [] は GC されない。 > foo.push("obj1") > foo.push("obj2") > p foo.e(0) #=> "obj1" > p foo.e(1) #=> "obj2" > }.call > #p Test::TheArray # ==> uninitialized constant Test::TheArray (NameError) > #p foo # ==> undefined local variable or method `foo' > # [] を参照していた foo も無くなれば、おそらくは [] も GC される。 > ' > "obj1" > "obj2" この例では [] に @BaArray が束縛された時点でオブジェクト foo と [] の参照関係が成立してしまうということでいいのでは無いで しょうか。元の YaArray のインスタンスにはインスタンス変数が 無い所が話をややこしくしているのだと思います。