Est-ce une bonne utilisation temporaire d'un std::string?
-
12-11-2019 - |
Question
std::string getMyString() { return <make a string>; }
...
HANDLE something = OpenSomething(getMyString().c_str(), ...);
J'ai lu Garantie à vie temporaire en C++ et je crois que la chaîne temporaire va vivre jusqu'à ce que la cession a été évalué, c'est à direbeaucoup assez longtemps pour faire ce travail comme prévu.
Après avoir une fois avant de courir dans une std::string
la durée de vie liés à un bug (ne me souviens pas ce que c'était), j'aurais plutôt double-vérifier...
La solution
Oui, c'est très bien.:-)
La chaîne sera détruit à la fin de l'instruction, au point virgule.
Autres conseils
Le destructeur de la temporaire ne sera pas appelé jusqu'à ce que après l'appel de la fonction retourne, donc ce que nous voyons ici est sûr.
Cependant si la fonction appelée enregistre le char*
et il finit par être utilisée en quelque sorte après OpenSomething
de nouveau, alors que c'est un beau balançant pointeur.
Si vous n'utilisez aucun autre argument de OpenSomthing
pour le retour de pointeur getMyString.c_str()
tout sera OK.