Retornando 'c_str' de uma função
Isto é de uma pequena biblioteca que eu encontrei online:
const char* GetHandStateBrief(const PostFlopState* state)
{
static std::ostringstream out;
// ... rest of the function ...
return out.str().c_str()
}
No meu código, estou fazendo o seguinte:
const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;
Agora, primeirod
lixo contido. Percebi então que a string C que estou obtendo da função é destruída quando a função retorna porquestd::ostringstream
está alocado na pilha. Então eu adicionei:
return strdup( out.str().c_str());
E agora posso obter o texto que preciso da função.
Eu tenho duas perguntas:
Estou entendendo isso corretamente?
Mais tarde notei queout
(do tipostd::ostringstream
) foi alocado com armazenamento estático. Isso não significa que o objeto deve permanecer na memória até que o programa termine? E se sim, então por que a string não pode ser acessada?