これは私が信じていることです:
関数が返されると、オブジェクトの新しい一時コピーが作成され、この一時オブジェクトは、それが呼び出された場所からステートメントが実行されるまでメモリに残ります。
関数が参照を返すと、そのオブジェクト自体が返されます。これは、そのオブジェクトがローカルであってはならないことを意味します。
だから私はこれを行うとき:
MyStruct & ReferenceReturn(MyStruct cl)
{
return cl;
}
main() で私は
MyStruct d("notmyname"),g("myname");
d = ReferenceReturn(g);
cout << d.name;
cout << ReferenceReturn(g).name;
両方にゴミを印刷します。
何が返されますか? : 関数が終了するとすぐに破棄される g ie cl のローカル コピーへの参照、またはステートメントの終了後に破棄される一時オブジェクトへの参照。しかし、temp が作成されていれば、d は正しい方法で上書きされていたはずです。したがって、渡された値のローカルコピーの参照が返されると思います。
しかし、構造体でデストラクタを作成するとすぐに、次のコードと特定の出力で完全に機能しました。
~MyStruct()
{
cout << name << " is destroying";
}
出力:
myname is destroying
myname
myname
myname is destroying
....
この出力は、呼び出しごとに 1 つのオブジェクトのみが作成されることを示しています。(2回の呼び出しがあります)
しかし、なぜデストラクタなしでは機能しないのでしょうか?
ありがとう