Buenas.
En la asignatura Programación Orientada a Objetos de mi carrera me han pedido realizar una práctica sobre la gestión de una clínica. El caso es que para comprobar que nuestra práctica está bien debemos pasar un autocorrector que ellos nos mandan, por lo tanto el código que usa el autocorrector no puede ser modificado ya que su función es la de comprobar que nuestra práctica funciona correctamente realizando una serie de pruebas.
El problema viene a raíz de la clase Diagnostico
Código:
Esta es una función miembro de la clase:class Diagnostico{ private: Tratamiento *tratamiento; <más codigo aquí>
Código:
y este es el código que uso en el destructor de la clase:void Diagnostico::tratar(Tratamiento *t){ if(tratamiento != NULL) delete tratamiento; tratamiento = t; }
Código:
Vale, hasta aquí bien, el problema viene cuando el autocorrector ejecuta la siguiente secuencia:Diagnostico::~Diagnostico(){ if(tratamiento != NULL){ delete tratamiento; tratamiento = NULL; } }
Código:
Tratamiento *t0 = new Tratamiento("Tratamiento #0"); Diagnostico *d0 = new Diagnostico(tdAlta,"Diagnostico #0"); d0->tratar(t0); delete t0; delete d0;
La salida del programa es: Fallo de segmentación como es lógico ya que el destructor intenta borrar una posición de memoria que ya no existe, pero el caso es que este código del autocorrector no puedo cambiarlo delete t0; delete d0; que es el que da problemas, y no sé qué hacer en el destructor para que cuando se destruya un objeto Diagnostico elimine al objeto tratamiento que tiene asociado, como se define en la parte privada.
Bueno, si alguien ha entenddo la parrafada anterior y puede ayudarme se lo agradecería. Saludos!!