Jqr91 ha scritto:
quindi per il costruttore di copia non c è bisogno di allocare memoria?? E per quanto riguarda il cistruttore di default??
No, la questione è diversa. Il fatto del costruttore di default o del costruttore di copia non c'entra nulla: devi allocare memoria quando è necessario. In questo caso non lo era, perché copiavi tra oggetti, ecc. Se anziché il tipo string tu avessi utilizzato dei char* (puntatori a char, che si possono vedere come array dinamici di char) allora sì che avresti dovuto allocare memoria con una new (e poi deallocarla con una delete nel distruttore dell'oggetto).
Per quanto riguarda l'assegnazione tra liste, prima ti ho linkato la documentazione proprio per mostrarti che non devi fare niente. E' sufficiente scrivere
nuova_lista = vecchia_lista;
e l'operatore = fa tutto il lavoro per te.