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