Warum hat shared_ptr einen Verschiebungskonstruktor?

7

In C ++ hat 11 std::shared_ptr einen Bewegungskonstruktor und einen Bewegungszuweisungsoperator.

Gibt es einen Grund, warum dies erforderlich ist, d. h. würden sich Programme, die es verwenden, anders verhalten, wenn nur der Kopierkonstruktor und die Zuweisungsoperatoren existieren?

Es scheint, dass der einzige Effekt davon ist, dass das zusätzliche Inkrement und spätere Dekrementieren des Referenzzählers vermieden wird.

    
tmlen 01.12.2016, 11:12
quelle

1 Antwort

27

Das Kopieren eines gemeinsamen Zeigers ist sehr teuer, da die internen Referenzzählwerte atomar und mit der richtigen Speicherordnung geändert werden müssen, was zu Bussperren und Zäunen führen kann. (Denken Sie daran, dass mehrere Threads möglicherweise ihre eigenen, lokalen, gemeinsamen Zeiger kopiert haben, die dasselbe Objekt besitzen.) Wenn Sie Eigentum wirklich von einem Objekt in ein anderes Objekt übertragen wollen, brauchen Sie das nicht. und das Bewegen ist überlegen.

    
Kerrek SB 01.12.2016, 11:14
quelle

Tags und Links