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...

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top