Ich habe eine std::vector<Foo>
, wobei Foo
eine Klasse ist, die Foo( Foo&& ) noexcept
enthält.
Das Hinzufügen von Objekten zum Container funktioniert einwandfrei, jedoch löscht GCC 4.7 beim Löschen mit std::vector::erase( iterator )
den Zuweisungsoperator, den ich gelöscht habe. Die genaue Fehlermeldung lautet:
Fehler: Verwendung der gelöschten Funktion 'Foobar & amp; Foobar :: operator = (const Foobar & amp;)
Bearbeiten: Natürlich ruft std::vector
den Zuweisungsoperator auf, nicht den Kopierkonstruktor (das sehen Sie auch in der Fehlermeldung). Behebt es in der Beschreibung, sorry.
Hier ist ein Beispiel-Quellcode wie angefordert:
%Vor%Die Antwort von DeadMG ist hervorragend, aber ich würde gerne eine andere Möglichkeit zum Schreiben des Zuweisungsoperators propagieren:
%Vor%Da Sie zu Beginn der Methode ein neues temporäres Objekt benötigen, wählt der Compiler entweder den Kopier- oder den Verschiebungskonstruktor aus, um dieses temporäre Objekt zu erstellen, und Sie müssen nicht einen Kopierzuweisungsoperator UND eine Verschiebungszuweisung schreiben Betreiber:)