Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/02/2014, 14:39
Avatar de patilanz
patilanz
 
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Copia de un objeto derivado con poliformismo

Cita:
Iniciado por vosk Ver Mensaje
"...el problema es que si se destruye la dirección de memoria donde apunta la referencia también se perdira en la clase que contiene choosePJ()..."

Cierto, pero dado que el miembro privado de la clase user 'lpj *pj' es un puntero a un objeto lpj y que desde la funcion choosePj no puedes crear el lpj por falta de datos, solo te quedan tres opciones: o bien modificas todo para que la funcion choosePj sea capaz por si sola de crear el lpj, o bien implementas una notificacion a 'user' para cuando se elimine el objeto *pj (que asigne nulo y sepa que ya no existe o no es valido). La tercera opcion es implementar una funcion en lpj para que se clone a si mismo, retornando una nueva instancia independiente del objeto que la genera. Con un new o con una desreferencia no se si se soluciona el problema (creo que no), pero por probar que no quede:

Código C++:
Ver original
  1. //con new
  2. lpj *clon = new lpj(pj);
  3.  
  4. // con una desreferencia:
  5. lpj clon = *pj;

Para la forma de clonar desde la propia clase no te pongo nada de codigo para no equivocarme. La cosa va por ahi, seguramente alguien con conocimiento de c++ sabra aportarte una mejor solucion.

Saludos
vosk
Hola no tengo problema en crear una función de copia de la clase lpj pero no creo que funcionaria con los objetos derivados o tendré que crear para cada objeto su constructor de copia lo que no me gusta mucho.
Luego la segunda opción de mandar le una notificación al usuario que utiliza las clases tampoco me parece la mas adecuada ya que no resuelve el problema.

Luego de modificar todo no tengo problema en hacerlo pero no se me ocurre como hacer lo ya que quiero que la función choosePj se pueda llamar en cualquier momento para poder cambiar el pj.

Gracias de todos modos
Saludos