Ich sehe einige Fehler, die std::vector< std::unique_ptr< T > >
mit std::move
umgehen. Der Code, der das Problem reproduziert, ist dies:
Mit clang 3.4 erzeugt dieser Code diesen Fehler:
%Vor%Die Situationen scheinen mit g ++ 4.8 nicht besser zu sein:
%Vor%Laut dieser Antwort und den Kommentaren sollte dies nicht bei diesen Compilern passieren, aber ich bin es nicht Genau das gleiche: Ich versuche den Vektor mit einer Initialisierungsliste zu initialisieren.
Irgendeine Idee, was passieren muss, damit dieser Code korrekt erstellt wird?
Die verwendete braced-init-Liste in der return-Anweisung in getVector
führt zu einem Aufruf des Konstruktors std::vector<T>
, der das Argument initializer_list<T>
verwendet. Auch wenn Sie unique_ptr
verschieben, ist ein initializer_list
nur const
Zugriff auf seine Elemente möglich , fällig zu dem der vector
versucht, den unique_ptr
zu kopieren, was zu dem angezeigten Fehler führt.
Sie können den Fehler beheben, indem Sie eine ausführlichere Methode zum Erstellen von vector
Um der Neugier willen ist es möglich, ein vector
aus einem Array von Nur-Bewegung-Objekten zu konstruieren, aber Sie müssen std::move_iterator
um die Elemente zu verschieben.
Tags und Links c++ c++11 move-semantics unique-ptr stdvector