La specializzazione di std::swap
è ora facoltativa, ma non deprecato. La logica è la prestazione.
Per il codice di prototipazione, e forse anche per molto codice di spedizione, std::swap
sarà molto veloce. Tuttavia, se ti trovi in una situazione in cui hai bisogno di trarre il massimo dal tuo codice, scrivere uno scambio personalizzato può comunque rappresentare un notevole vantaggio in termini di prestazioni.
Considerare il caso in cui la classe ha essenzialmente un puntatore proprietario e il costruttore di movimento e l'assegnazione di spostamento devono semplicemente occuparsi di quel puntatore.Conta carichi e depositi per ogni membro:
Costruttore di spostamento: 1 carico e 2 negozi.
Spostamento assegnazione: 2 carichi e 2 negozi.
Swap personalizzato: 2 carichi e 2 negozi.
std::swap
è una costruzione di spostamento e due spostamenti, oppure: 5 carichi e 6 negozi.
Uno scambio personalizzato è potenzialmente ancora due o tre volte più veloce di std::swap
. Anche se in qualsiasi momento stai cercando di capire la velocità di qualcosa contando carichi e negozi, entrambi saranno presto malvagi.
Nota: nel calcolo del costo dell'assegnazione del movimento, accertarsi che si passi al valore spostato da (nell'algoritmo std::swap
). Questo spesso nega il costo di una deallocazione, anche se a costo di una filiale.
fonte
2011-12-23 15:04:55
Voglio dire che questo è stato menzionato da Scott o Herb a _C++ e Beyond_, ma non riesco a trovare nulla a riguardo. –
Correlati: [Sposta semantica == funzione di scambio personalizzata obsoleta?] (Http://stackoverflow.com/questions/6416385/move-semantics-custom-swap-function-obsolete) – Xeo
@Xeo: Grazie, mi ero completamente dimenticato di quella domanda/risposta. Ricevo punti per essere coerente? :-) Sono sicuro che sarebbe stato rosso in faccia altrimenti! –