Se non li metti il compilatore genera automaticamente un costruttore di copie (ma non l'operatore di assegnamento) che copia tutti i campi della classe di origine nella nuova istanza. Se imposti un costruttore di copie vuoto disabiliti quello fornito implicitamente dal compilatore, ma se non ci scrivi dentro niente ovviamente non copierà un bel niente.Originariamente inviato da Alfoxx
Ho visto nel libro che nella stesura della classe Pila realizzata con array statico, nella parte private mette il costruttore di copia e l'overload dell'operatore = , entrambi con corpo vuoto.
Poi quando va a graficare il codice, non ce lo mette.
A questo vi chiedo: ce li devo mettere ugualmente? visto che il corpo delle due funzioni è vuoto?Quindi, o lasci quello fornito dal compilatore oppure lo implementi correttamente.
In alternativa, puoi rendere la classe non-copiabile (e dimenticarti di questi problemi) dichiarando un costruttore di copia privato e senza definizione.
Nel caso di una pila realizzata con un array dinamico devi sicuramente scriverli esplicitamente, dato che quello di default si limiterebbe a copiare il puntatore all'array dinamico, ottenendo così che le due pile condividono lo stesso array interno (e, al momento della distruzione, si avrebbe una doppia delete dello stesso array).e poi nella realizzazione della pila dinamica, credo che ce lo devo mettere sia il costruttore di copia che l'overload dell'operatore =, ma in questo caso devo esplicitarlo il corpo delle due funzioni?
Nota comunque che scrivere costruttore di copia/operatore di assegnamento/distruttore correttamente è molto meno banale di quanto possa sembrare.
Sì.stesso ragionamento per le code?