2011-03-27 13 views
5
std::string getMyString() { return <make a string>; } 

... 

HANDLE something = OpenSomething(getMyString().c_str(), ...); 

He leído Guaranteed lifetime of temporary in C++ y creo que la cadena temporal seguirá viva hasta que se haya evaluado la tarea, es decir, el tiempo suficiente para que funcione como se esperaba.¿Es este un uso adecuado de una std :: string temporal?

Habiendo una vez antes de correr en un error de tiempo de vida relacionada std::string-(no puedo recordar lo que era) prefiero vuelva a comprobar ...

Respuesta

7

Sí, esto está bien. :-)

La cadena se destruirá al final de la instrucción, en el punto y coma.

8

El destructor para el temporal no será llamado hasta después de la la llamada de función vuelve, entonces lo que vemos aquí es seguro.

Sin embargo si la función llamada guarda el char* y termina siendo utilizado de alguna manera después de OpenSomething ha vuelto, entonces eso es un buen colgando puntero.

+0

Sí, buen punto - aunque no lo hace. –

0

Si no utiliza ningún otro argumento de OpenSomthing para devolver el puntero a getMyString.c_str(), todo estará bien.

Cuestiones relacionadas