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



