Hier ist die A-Code ähnlich wie einen I habe:bereichsbasierte Schleife, einzigartige Zeiger und bewegt Semantik
for (auto &uptr : vector_of_unique_ptrs) { // 1
auto result = do_the_job_with_pointee(uptr.get()); // 2
record_intermidiate_result(result, std::move(uptr)); // 3
}
Hier habe ich einen Vektor von Zeigern auf einzigartigen einige Objekte (Linie 1).
I iterieren über den Vektor (Zeile 1) und einige Arbeit mit dem Pointee (Zeile 2).
Nachdem der Job fertig ist, muss ich ein Ergebnis machen und das Eigentum an einen anderen Ort übergeben (Zeile 3).
Der Code kompiliert und führt ohne Probleme, aber ich habe das Gefühl, dass es nicht legal ist, iteratee während der Iteration zu verschieben.
Ich "überflogen" obwohl öffentlich zugänglichen C++ 11 Entwurf, aber fand keine Klarstellungen zu diesem Thema.
Kann mir jemand sagen, ob der obige Code legal ist oder nicht?
Ihr Vektor wird 'nullptr'' unique_ptr' haben. – Jarod42
sollten Sie Vektor-Iteratoren nicht ungültig machen, dh rufen Sie 'radiate()' 'insert()' usw. auf. Das Ändern von Elementen ist völlig in Ordnung. – Slava
Ja, jetzt verstehe ich es. Vielen Dank für Ihre Kommentare. – AlexDenisov