• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:戻り値で返したオブジェクトの寿命について)

Rubyの戻り値とオブジェクトの寿命について

このQ&Aのポイント
  • Rubyでは関数内で宣言したオブジェクトの参照は保障されるため、関数を抜けてもアドレスの内容が破棄されない
  • メソッド内で宣言したオブジェクトの寿命は、そのオブジェクトが参照される範囲で継続する
  • Rubyのオブジェクトの参照にはポインタの概念があり、戻り値として返したオブジェクトの参照も保持される

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.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個になった後のガベージコレクションの時点という人もいるかもしれません。

kudou_misaki
質問者

お礼

ご回答ありがとうございます。 すごく分かりやすい説明で、スッキリしました。

関連するQ&A