質問: return_ref_obj(2); //関数に2を渡し、2を保持するオブジェクトを作成し参照として受け取る ref_obj.show_value(); //整数(2)表示 ref_obj.say_hey(); } プログラムを実行した出力------------------- 1 hey -858993460 hey このようにオブジェクト自体を返してコピーしたもの(return_obj使用)はshow_valueでただしくオブジェクトに保持された数が表示されますが 参照でオブジェクトを返したもの(return_ref_obj使用)はアドレスのような数列が表示されます。 質問a これはオブジェクトの参照を返す関数(return_ref_obj)でオブジェクトを作成しても、そのオブジェクトが関数の中でのみ実在しており、関数がおわるとその実体がなくなるためではないかと解釈しているのですがそれで正しいでしょうか? 質問b 関数でオブジェクトを作成してそれをプログラム本体に渡すときはreturn_objのようにオブジェクト自体をコピーしなければ参照などで渡すことはできないのでしょうか? クラスと参照自体勉強を始めたばかりで色々と初歩的な間違いもあるとは思いますが、よろしくお願いします
回答: 質問a:その理解で正しいです。 質問b:作ったオブジェクトを参照で返すのは止めた方が良いです。 オブジェクトをコピーで返しましょう。 あるいはnewで作ってポインタで返しましょう。 関数内で自動変数を宣言して作ったオブジェクトはその関数を終えると削除されるので、そこへの参照は懸垂参照という不正な状態になります。 newで作成したオブジェクトはdeleteするまで存在するので関数から返せます。このときは参照でなくポインタを返しましょう。参照を返すとdeleteが面倒です。