Возвращение c_str из функции

Это из небольшой библиотеки, которую я нашел в Интернете:

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

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

    return out.str().c_str()
}

В моем коде я делаю это:

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

Теперь сначалаd содержал мусор. Затем я понял, что строка C, которую я получаю от функции, уничтожается, когда функция возвращается, потому чтоstd::ostringstream размещается в стеке. И я добавил:

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

И теперь я могу получить нужный мне текст из функции.

У меня есть два вопроса:

Я правильно понимаю?

Я позже заметил, чтоout (типаstd::ostringstream) было выделено статическое хранилище. Не означает ли это, что объект должен оставаться в памяти до завершения программы? И если так, то почему нельзя получить доступ к строке?

Ответы на вопрос(4)

Ваш ответ на вопрос