In linea generale il compilatore cerca sempre di convertire il secondo parametro con il tipo del primo ... Siccome la conversione da int a class è definita (seppur in maniera automatica) in fase di compilazione non si hanno errori di sorta, diversamente dal secondo caso (la cui conversione non avviene in automatico ma deve essere definita dal programmatore)1) Però perché "int + class" non lo sa fare (invece di "class + int") ?
In generale non bisogna mai lasciare il costruttore di copia di default quando si hanno puntatori come attributi (anche se delle volte potrebbe essere voluto) soprattutto quando si utilizzano i puntatori per allocare memoriaLeggendo un libro sul c++, ho letto di fare molta attenzione riguardo al costruttore per copia, perché visto che quello di default copia bit a bit, se uso puntatori nella classe rischio di andare a condividere lo stesso membro tra più classi se uso l'=. Questo fatto mi ha fatto venire la paranoia e non so mai bene cosa fare per fare le cose fatte bene...
In realtà verrebbe creato un oggetto temporaneo (T1) che poi verrebbe passato all' operator= per riferimento (quindi niente T2) e poi T1 verrebbe distruttoAd esempio se ho la classe C, e C1, C2, C3 tre variabili di quella classe, se io scrivo: C3 = C1 + C2 allora, viene chiamato il + di C1 e viene passato C2, il + fa il suo lavoro e crea un NUOVO oggetto che chiamiamo T1; Poi viene chiamato il costruttore per copia (o l'operator = ?!?) di C3, gli viene passato T1, e si crea un nuovo oggetto T2, e T1 muore. Infine T2 viene copiato bit a bit in C3, e T2 muore.
All' inizio è molto facile confondersi ... Comunque tieni bene a mente che quando un oggetto viene definito (quindi costruito) e copiato allo stesso tempo, viene richiamato il costruttore di copia (non a caso è chiamato costruttore). Se invece un oggetto viene copiato ma dopo la sua definizione, viene richiamato l' operator=Ora, non sono per niente sicuro di quello che ho detto (perdonami sto studiando ora), ma chi viene chiamato in quel codice? il costruttore per copia o l'=?

Rispondi quotando