- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:戻り値で返したオブジェクトの寿命について)
Rubyの戻り値とオブジェクトの寿命について
このQ&Aのポイント
- Rubyでは関数内で宣言したオブジェクトの参照は保障されるため、関数を抜けてもアドレスの内容が破棄されない
- メソッド内で宣言したオブジェクトの寿命は、そのオブジェクトが参照される範囲で継続する
- Rubyのオブジェクトの参照にはポインタの概念があり、戻り値として返したオブジェクトの参照も保持される
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>1.Rubyではその様な問題がなく動作するのは、何故でしょうか? Rubyだと、戻り値は、ローカル変数のアドレスでは無いからです。 Cだと、mallocしたエリアのアドレスに相当します。 >2.また、メソッド内で宣言したオブジェクト(上記[1,2,3])の寿命はいつまでなのでしょうか? オブジェクトの寿命は、変数のスコープとは無関係です。そのオブジェクトのへの参照が0個になると寿命が尽きます。メモリエリアが回収されるのは寿命が尽きた後のガベージコレクションの時です。 a=[1,2,3] #=> 参照が1個 b=a #=> 参照が2個 a=3 #=> 参照が1個 b="A" #=> 参照が0個 →この段階でオブジェクト[1,2,3]の寿命が尽きる 「寿命」という言葉の定義によっては、参照が0個になった後のガベージコレクションの時点という人もいるかもしれません。
お礼
ご回答ありがとうございます。 すごく分かりやすい説明で、スッキリしました。