Poniamo di avere questa famiglia di classi

codice:
class Base//classe astratta
{
  public:
    //metodi pubblici=0
}

class Derivata1: public Base
{
  public:
    //metodi pubblici implementati
    Derivata1& operator=(const Derivata1& da_copiare)
    {
      this->dato1=da_copiare.dato1;
      this->dato2=da_copiare.dato2;
      return *this;
    };
  private:
    tipo1 dato1;
    tipo2 dato2;
};

class Derivata2: public Base
{
  public:
    //metodi pubblici implementati
    Derivata2& operator=(const Derivata2& da_copiare)
    {
      this->dato3=da_copiare.dato3;
      this->dato4=da_copiare.dato4;
      return *this;
    };
  private:
    tipo3 dato3;
    tipo4 dato4;
};
Se nel codice che impiega quanto sopra faccio

codice:
Derivata1 oggetto1;
//operazioni su oggetto1
Derivata1 oggetto2;

oggetto2=oggetto1;
Tutto fila liscio, oggetto2 è effettivamente uguale a oggetto1 (in altre parole, visualizzo i dati membro dei due oggetti prima e dopo oggetto2=oggetto1, e l'operatore= funziona effettivamente.

Se invece ho la seguente situazione

codice:
Base* oggetto1 = new Derivata1;
//operazioni su oggetto1
Base* oggetto2 = new Derivata1;

*oggetto2=*oggetto1;

L'operazione non va a buon fine. Sbaglio qualcosa o la cosa in effetti non è possibile?
Se non è possibile, allora mi appoggio alla funzione clone (v. anche http://forum.html.it/forum/showthrea...1#post25375912 )

Per ora il mio era un puro esercizio 'accademico', in quanto per la famiglia di classi in cui ho provato a fare quanto sopra, tipo1, tipo2, tipo3 e tipo4 sono tutti double, però in futuro non si sa mai...

Grazie