El siguiente código funciona bien, pero ¿por qué es este código correcto? ¿Por qué es válido el puntero "c_str()" del temporal devuelto por foo()? Pensé, que este temporal ya está destruido cuando se ingresa barra(), pero no parece ser así. Entonces, ahora supongo que el temporal devuelto por foo() se destruirá después de la llamada a la barra() - ¿es correcto? ¿Y por qué?Vida útil de los temporales
std::string foo() {
std::string out = something...;
return out;
}
void bar(const char* ccp) {
// do something with the string..
}
bar(foo().c_str());
También tenga en cuenta que 'c_str()' solo devuelve un * puntero temporal *. Su duración no dice nada sobre la duración de los datos que apunta. – jalf
'c_str()' no devuelve nada temporal. Devuelve un rvalue de tipo puntero. Los valores R de tipo puntero no son objetos. No tienen vida. –