Estoy usando una biblioteca llamada tinyXML, que analiza archivos XML. Muchos de sus métodos devuelven un const char*.
Después de haber leído esta pregunta: cómo devolver una matriz de caracteres desde una función en C
Ahora creo que cada vez que un método devuelve un carácter * es responsabilidad de la persona que llama (mi) liberarlo explícitamente, porque probablemente se asigna dinámicamente en el montón. ¿Estoy bien / mal? ¿Qué puedo suponer?
(Si alguna vez escribiera una biblioteca, preferiría devolver std::string en lugar de char* arrays, porque son mucho más simples para el usuario).
No puede asumir nada y debe consultar la documentación del método al que está llamando para saber si debe liberar el puntero o no. A veces, una función que devuelve un const char * podría estar devolviendo una cadena asignada estáticamente:
const char *getName(){ return "SPQR3"; } O podría ser un indicador que es responsabilidad de otra persona liberar. Por ejemplo, el valor de retorno de strcpy es el mismo que el puntero que le pasa como entrada.
Lea la documentación de la biblioteca. Ambos usos (puntero a un búfer interno o puntero a un búfer asignado dinámicamente) son comunes y no se distinguen solo del prototipo de función.