Il link che descrive le potenziali implementazioni di un operatore di assegnazione descritto class_name& class_name::operator=(class_name)
come:
tipica dichiarazione di un operatore di assegnamento per copia quando idioma copia-e-swap può essere utilizzato
E class_name& class_name::operator=(const class_name&)
come :
Tipica dichiarazione di un operatore di assegnazione copia quando non è possibile utilizzare il linguaggio copia e swap
Fondamentalmente abbiamo sarebbe sempre desidera utilizzare la copia-e-swap, quando possibile, come indicato nel excellent answer to your linked question, perché passerà il test di auto-assegnazione.
Quindi ora la domanda è perché la convenzione menzionata su http://www.cppreference.com?
Diciamo che sto implementando un costruttore di copia in una classe virtuale, e voglio chiarire a chiunque erediti che dovrebbero usare l'idioma copy-and-swap. Come potrei farlo?li ho potuto fare facendo la copia per loro nella chiamata iniziale:
class_name& class_name::operator=(class_name)
Questa è una copia per valore, per cui il realizzatore di tutte le classi bambino avrebbe vedere che ho già fatto la copia per loro in modo tutto dovranno fare lo scambio.
Ora, cosa succede se ho un class_name
che conteneva un membro che non può essere copiato, ad esempio cosa succede se la mia classe ha un unique_ptr
tale da non poter essere copiato. Posso indicare che da non fare una copia per argomento valore al l'operatore di assegnazione, ad esempio:
class_name& class_name::operator(const class_name&)
indicando che sarà in realizzatore di tutte le classi figlio al fine di garantire che il controllo sufficiente è fatto per passare il sé -assegno di assegnazione.
fonte
2015-11-16 12:23:27
In genere, copy-and-swap è * facile * e * sicuro *, ma forse non ottimale da una prospettiva di velocità. Ad esempio, assegnando due contenitori di un milione di elementi, è probabilmente più veloce eseguire un milione di assegnazioni che eseguire un milione di costruzioni e un milione di distruzioni. –
@ user2079303 grazie, quella frase era ubriaca doveva andare a casa. Spero che ora sia più chiaro – Darius
Casi reali in cui copiare/scambiare uccide le tue prestazioni: http://stackoverflow.com/a/25942402/576911 –