Dans le code ci-dessous j'ai une fonction qui modifie deux objets coûteux-à-copie, et je suis en train de sortir sans paramètres de sortiestd :: cravate et la durée de vie des objets retournés dans tuple
struct FatThing {/* some big data members here*/};
auto processFatThings(FatThing ft1, FatThing ft2)-> std::tuple<FatThing, FatThing> {
// do smth with those two
return std::make_tuple(move(ft1), move(ft2));
}
auto useProcessFatThings()-> void {
FatThing ft1, ft2;
std::tie(ft1, ft2) = processFatThings(move(ft1), move(ft2)); // dangling references?
}
I Je suis un peu confus maintenant, puisque le compilateur n'émet aucun avertissement, les assainisseurs et memcheck sont propres, et le code fonctionne. Mais!!! Une référence balancée n'est-elle pas créée avec std :: tie ici?
Pourquoi pensez-vous que des références pendantes sont impliquées? Vous n'utilisez aucune référence nulle part, ni dans vos arguments de fonction, ni dans vos types de retour. – pschill