È un uso adeguato di una STD :: String temporanea?
-
12-11-2019 - |
Domanda
std::string getMyString() { return <make a string>; }
...
HANDLE something = OpenSomething(getMyString().c_str(), ...);
ho letto Vita garantita di temporanea in C ++ E credo che la stringa temporanea vivrà fino a quando l'incarico non sarà valutato, cioè molto a lungo da far funzionare questo lavoro come previsto.
Avere una volta prima di imbatterti in un std::string
Bug correlato a vita (non ricordo cosa fosse) Preferirei ricontrollare ...
Soluzione
Sì, va bene. :-)
La corda verrà distrutta alla fine della dichiarazione, nel semi colon.
Altri suggerimenti
Il distruttore per il temporaneo non verrà chiamato fino a quando la chiamata della funzione non tornerà, quindi ciò che vediamo qui è sicuro.
Tuttavia Se la funzione chiamata salva il char*
e finisce per essere usato in qualche modo dopo OpenSomething
è tornato, quindi questo è un ottimo puntatore penzolante.
Se non usi nessun altro argomento di OpenSomthing
per il ritorno del puntatore a getMyString.c_str()
tutto andrà bene.