> > A tiene que tener un método virtual llamado (comunmente, pero no es
> > obligatorio) Clone() que regresa A*, y en las clases derivadas el
> > método Clone() retorna B* o C* según cuál sea la clase implementada
> > Entonces en D, llamás al método Clone() de tu propiedad A*
>
> operator= ?
>
Si A* ya estuviese construido del tipo correcto si...el problema es
que A* apunta a NULL todavia.

Generalmente la solucion del Clone deja a todos felices...pero hay que
analizar cada caso. El tema es quien te da el A* de origen en primer
lugar, hay 2 chances:
1. te lo pasaron de afuera
2. lo construyo la mismisima D
2b. hay un factory involucrado
En el caso 1 tenes que analizar si el puntero viene de afuera parece
una agregacion y no seria conveniente copiarlo por que anda a saber si
lo tenes que eliminar despues.
Para el caso 2....si supiste que heredero de A construir en primer
lugar...¿por que durante la copia no sabrias cual es?
Para 2b: ver 2.

La solucion del Clone es simple, lo que no me gusta es que hace un new
dentro que debe ser deleteado desde el que lo llama...cosa que no es
muy elegante por que pierde simetria....ya estoy divagando...fue

sds

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a