TipoPuntatore è una classe astratta da cui derivo una famiglia di classi (Tipo1,Tipo2,Tipo3, ecc i cui dati membro sono solo alcuni double, per cui potrebbe andare bene quello che fa il compilatore per la copia).

quindi in realtà dovrei correggere quanto ho scritto circa l'implementazione del costruttore di copia

codice:
Prova::Prova(const Prova& da_copiare)
{
  //1) copio in un puntatore temporaneo il puntatore dell'oggetto da_copiare
  TipoPuntatore* puntatore_temporaneo=da_copiare.mPuntatore;
  //2) ricavo i dati puntati dal puntatore dato membro dell'oggetto che deve essere copiato
  TipoDatiDaCopiare dati_temporanei=puntatore_temporaneo->getDati();
  //3) ricavo il tipo di classe istanziata in Prova
  TipoPuntatore::Type temp_type=puntatore_temporaneo->getType();
  //4) creo l'istanza del dato membro puntatore del nuovo oggetto partendo dai dati ricavati mediante il puntatore temporaneo
  mPuntatore=Factory::makeTipoPuntatore(TipoDatiDaCopiare dati_temporanei, TipoPuntatore::Type temp_type);
}
Spero di essermi spiegato...