同じような質問がたくさんあるので、タイトルはなじみがあるように聞こえますが、問題の別の側面を求めています(スタックに物を置くこととヒープに置くことの違いを知っています)。
Javaでは、常に「ローカル」オブジェクトへの参照を返すことができます
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
C ++では、似たようなことをするために2つのオプションがあります
(1)オブジェクトを「返す」必要があるときはいつでも参照を使用できます
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
次に、このように使用します
Thing thing;
calculateThing(thing);
(2)または、動的に割り当てられたオブジェクトへのポインタを返すことができます
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
次に、このように使用します
Thing* thing = calculateThing();
delete thing;
最初の方法を使用すると、メモリを手動で解放する必要はありませんが、コードを読みにくくします。2番目のアプローチの問題は、覚えておかなければならないことです。delete thing;
です。コピーした値を返すのは非効率的だと思います(私は思う)ので、ここで質問をします
- 3番目の解決策はありますか(値をコピーする必要はありません)?
- 最初の解決策に固執しても問題はありませんか?
- いつ、なぜ第2のソリューションを使用する必要がありますか?