Bueno, p
no apunta a una cadena terminada en 0 si get_string()
devuelve NULL; ese es el problema aquí, ya que los constructores std::string
que toman un puntero a una cadena C terminada en 0 no pueden tratar con NULL, que es una cadena C tan terminada en 0 como dos docenas de bananas.
Por lo tanto, si get_string()
es su propia función, a diferencia de una función de biblioteca, entonces tal vez debería asegurarse de que no puede devolver NULL. Podría, por ejemplo, dejar que devuelva el buscado std::string
, ya que sabe que es de su propio estado. De lo contrario, me gustaría hacer esto, utilizando la Cleanup
de this answer como ayudante para garantizar que p
no puedan derramarse (como se sugiere por Martin York en un comentario):
string foo()
{
const char* p = get_string();
const Cleanup cleanup(p);
const std::string str(p != NULL ? p : "");
return str;
}
sí, excepto que no se utilizan normalmente Boost, pero puede crear una clase como a mí mismo. Gracias –
Ese es un ejemplo DULCE. – Allbite