AFAIK, dans le code suivant la durée de vie de la référence ro1
est prolongée jusqu'à la fin de la portée (fonction g()
):Le renvoi d'une référence prolonge-t-il également sa durée de vie?
class Some {
// Implementation here
};
Some f() {
return Some(/* constructor parameters here*/);
}
void g() {
Some&& ro1 = f();
// ro1 lives till the end of this function
}
Que diriez-vous de retourner cette référence? l'objet va vivre encore g1()
, ou sera-il être à la sortie destructed de 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?
}
Pas de prolongation de la vie pour votre deuxième extrait. – Jarod42
** Si ** était 'std :: avant' puis une construction de mouvement peut-on attendre. Mais dans votre deuxième extrait, ** depuis ** est un 'std :: avant ', il évite ainsi toute construction et laisse une référence boiteuse –
'Non lorsque g' retourne le est détruit local temporaire et il vous reste un référence pendante. Aussi, je pensais que l'extension de référence n'était que pour ref ref pas rvalue ref - ai-je manqué quelque chose, cela a-t-il changé en C++ 1z? –