Vor C++ 11, es war schon immer der Fall, dass Zuweisungsoperator kopiert werden immer durch konstante Referenz, wie so passieren sollte:Soll der Zuweisungsoperator durch const Referenz oder nach Wert kopiert werden?
template <typename T>
ArrayStack<T>& operator= (const ArrayStack& other);
jedoch mit der Einführung der Umzug Zuordnung Betreiber und Konstrukteure, wie es scheint dass einige Leute dafür plädieren, stattdessen einen Wert für die Kopierzuweisung zu verwenden. Ein Umzug Zuweisungsoperator muss auch hinzugefügt werden:
template <typename T>
ArrayStack<T>& operator= (ArrayStack other);
ArrayStack<T>& operator= (ArrayStack&& other);
Die über 2 Betreiber Umsetzung wie folgt aussieht:
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack other)
{
ArrayStack tmp(other);
swap(*this, tmp);
return *this;
}
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator =(ArrayStack&& other)
{
swap(*this, other);
return *this;
}
Ist es eine gute Idee Pass von Wert zu verwenden, wenn Kopierzuweisungsoperator für C Erstellung Ab 11 Uhr? Unter welchen Umständen sollte ich dies tun?
'operator = (ArrayStack)' hat keinen Grund, eine Kopie 'tmp' zu erstellen. – aschepler
http://www.slideshare.net/riplelabs/howard-hinnant-accu2014 Folien 43-53 –
Die Pass-by-Value-Version kann die Zuordnung sowohl verschieben als auch kopieren, in der Regel durch Kopieren und Tauschen. –