Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/02/2014, 04:55
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Copia de un objeto derivado con poliformismo

"...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