3
私の知る限りでは、次のコードで参照ro1
の寿命は、スコープの終わりまで(機能g()
)を拡張さ:参照を返すことで寿命も延長されますか?
class Some {
// Implementation here
};
Some f() {
return Some(/* constructor parameters here*/);
}
void g() {
Some&& ro1 = f();
// ro1 lives till the end of this function
}
どのようにこの参照を返すでしょうか?オブジェクトはまだg1()
に住んでいますか?それとも、h()
の出口で破壊されますか?
Some&& h() {
Some&& ro1 = f();
// Code skipped here
return std::forward<Some>(ro1);
}
void g1() {
Some&& ro2 = h();
// Is ro2 still refering to a valid object?
}
2番目のスニペットの生存延長はありません。 – Jarod42
** **それが 'std :: forward'だった場合、移動の構築が期待できます。しかし、あなたの2番目のスニペットでは、**以降** 'std :: forward 'なので、建設を避けてダングリングレファレンスを残します。 –
'g'がローカルテンポラリを破棄して返します。ダングリングリファレンス。また、私は参照拡張は、ref値ではなく、const refのためだけだと思った - 私は何かが欠けている、C + + 1zでこの変更をしましたか? –