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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top