Devolver 'c_str' desde una función

Esto es de una pequeña biblioteca que encontré en línea:

const char* GetHandStateBrief(const PostFlopState* state)
{
    static std::ostringstream out;

    // ... rest of the function ...

    return out.str().c_str()
}

En mi código estoy haciendo esto:

const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;

Ahora al principiod basura contenida Luego me di cuenta de que la cadena C que obtengo de la función se destruye cuando la función regresa porquestd::ostringstream se asigna en la pila. Entonces agregué:

return strdup( out.str().c_str());

Y ahora puedo obtener el texto que necesito de la función.

Tengo dos preguntas:

¿Estoy entendiendo esto correctamente?

Más tarde me di cuenta de queout (de tipostd::ostringstream) se asignó con almacenamiento estático. ¿No significa eso que se supone que el objeto permanecerá en la memoria hasta que el programa termine? Y si es así, ¿por qué no se puede acceder a la cadena?

Respuestas a la pregunta(4)

Su respuesta a la pregunta