Pregunta:Es esto necesario?void Persona::IngresarNombre(const char * nombre){
strcpy(this->nombre, nombre);
delete nombre; //Es esto necesario?
}
Respuesta: ¿Cómo saberlo?
Se podría intentar responder primero a algunas cuestiones preliminares, por ejemplo:
¿Está claro en la documentación de cada función que invoca a IngresarNombre() que este parámetro va a ser destruido (delete) (y que cualquiera que vaya a usarla jure primero no volver a usar ese puntero después del punto de llamada).
Este puntero "
nombre" ¿fue creado con new? ¿Seguro? (¿no habrá sido con malloc?)
¿No convendría llamar a esta función de alguna manera que deje más claro su comportamiento, por ejemplo, IngresarNombreYCuidadoQueAcaMuereElPunteroNombre() ?
Cuando una función recibe un puntero "final", se dice que esa función recibe el "ownership", la responsabilidad del "delete", y se la suele llamar "sink function".
Ejemplo:
void sink_f(const char* p) // ¡¡ATENCIÓN!! ESTA FUNCIÓN DESTRUIRÁ A p ¡¡CUIDADO!! ¡¡ALERTA!!
{
// hacer algo con p, y después
delete[] p;
}
Y una forma de llamarla sería:
int main()
{
char* str = new char[12];
strcpy(str, "hola mundo!");
sink_f(str);
// delete[] str; // QUÉ SUERTE QUE LEÍ EL COMENTARIO DE sink_f(), uffff!!
}
Francamente... ¿qué opinas?
Por suerte ya nadie hace cosas como esa, espero.