Por ejemplo, imaginemos que tengo lo siguiente:
class contenedor
{
public:
contenedor(void) : dato(0) {}
contenedor(const contenedor& obj) : dato(obj.dato) {}
contenedor* clone(void) { return new contenedor(*this); }
virtual ~contenedor(void); {}
private:
int dato;
}
class tontoron
{
public
tontoron(void) : puntero(nullptr) { }
tontoron(const tontoron& obj)
{
puntero = obj.puntero->clone();
}
virtual ~contenedor(void) { delete puntero }
void init() { puntero = new contenedor(); }
private:
contenedor *puntero;
}
El constructor de copia de la clase tontoron ¿debería simplemente copiar la dirección del puntero o clonarlo(crear un nuevo bloque de memoria y copiar el contenido del puntero)?