Returning 'c_str' von einer Funktion

Dies ist aus einer kleinen Bibliothek, die ich online gefunden habe:

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

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

    return out.str().c_str()
}

n meinem Code mache ich das:

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

Nun, zuerstd enthalten Müll. Dann wurde mir klar, dass der C-String, den ich von der Funktion erhalte, zerstört wird, wenn die Funktion zurückkehrt, weilstd::ostringstream ist auf dem Stapel zugeordnet. Also habe ich hinzugefügt:

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

Und jetzt kann ich den benötigten Text von der Funktion erhalten.

Ich habe zwei Fragen

Verstehe ich das richtig?

Ich habe später bemerkt, dassout (vom Typstd::ostringstream) wurde mit statischem Speicher belegt. Bedeutet das nicht, dass das Objekt im Speicher bleiben soll, bis das Programm beendet wird? Und wenn ja, warum kann dann nicht auf den String zugegriffen werden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage