次のコードで何が起こるかを理解したい
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.xaf()yf()