次のコードで何が起こるかを理解したい
struct A
{
vector<double> x;
};
void f(A &a)
{
vector<double> &y = a.x;
}
関数fが終了すると、axは破棄されますか?前もって感謝します!
いいえa.x
、破壊されません。へのローカル参照を作成しただけa.x
で、関数は終了します。何も変更されません。あなたのコードは事実上何もしません。
参照はオブジェクトではないことに注意してください。y
は変数ですが、オブジェクトではありません。これは既存のオブジェクトへの参照ですa.x
が、そのオブジェクト自体はのスコープに対してローカルではありませんf
。したがって、変数y
はの終わりでスコープ外になりf
ますが、それが参照するオブジェクトは範囲外になりません。
この場合、あなたが入るとき、あなたf()
はローカルに、そして他の世界から独立して存在するそれへの参照y
を作成します。ローカルに作成された参照を離れると、スコープ外になり、破棄されます。残りの世界は、あなたが入る前の状態のままです。a.x
a
f()
y
f()