Als «move-semantics» getaggte Fragen

4
Warum kopieren wir dann umziehen?
Ich habe irgendwo Code gesehen, in dem jemand beschlossen hat, ein Objekt zu kopieren und es anschließend in ein Datenelement einer Klasse zu verschieben. Dies ließ mich insofern verwirrt, als ich dachte, der springende Punkt beim Bewegen sei, das Kopieren zu vermeiden. Hier ist das Beispiel: struct S { S(std::string …

8
initializer_list und Verschiebungssemantik
Darf ich Elemente aus einem verschieben std::initializer_list<T>? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Schon seit std::intializer_list<T> besondere Aufmerksamkeit des Compilers erfordert und keine Wertesemantik wie bei normalen Containern der C ++ …

5
Kann ich einen Vektor vom Typ "Nur Verschieben" auflisten?
Wenn ich den folgenden Code durch meinen GCC 4.7-Snapshot übergebe, wird versucht, das unique_ptrs in den Vektor zu kopieren . #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Offensichtlich kann das nicht funktionieren, weil std::unique_ptres nicht kopierbar ist: Fehler: …

3
Wie erzwinge ich die Bewegungssemantik, wenn ein Vektor wächst?
Ich habe std::vectorObjekte einer bestimmten Klasse A. Die Klasse ist nicht trivial und hat Kopierkonstruktoren und Verschiebungskonstruktoren definiert. std::vector<A> myvec; Wenn ich den Vektor mit AObjekten fülle (z. B. myvec.push_back(a)), wird der Vektor größer und verwendet den Kopierkonstruktor A( const A&), um neue Kopien der Elemente im Vektor zu instanziieren. …

4
Warum kein Standard-Verschiebungszuweisungs- / Verschiebungskonstruktor?
Ich bin ein einfacher Programmierer. Die Variablen meiner Klassenmitglieder bestehen meistens aus POD-Typen und STL-Containern. Aus diesem Grund muss ich selten Zuweisungsoperatoren oder Kopierkonstruktoren schreiben, da diese standardmäßig implementiert sind. Wenn ich std::moveObjekte verwende, die nicht beweglich sind, wird der Zuweisungsoperator verwendet, was bedeutet, dass dies std::moveabsolut sicher ist. Da …

2
Effizienz von C ++ 11 push_back () mit std :: move versus emplace_back () für bereits erstellte Objekte
In C ++ 11 emplace_back()ist im allgemeinen bevorzugt (in Bezug auf der Effizienz) zu , push_back()da es ermöglicht , in-Place - Konstruktion, aber das ist immer noch der Fall , bei der Verwendung push_back(std::move())mit einem bereits aufgebauten Objekt? Wird zum Beispiel emplace_back()in Fällen wie den folgenden immer noch bevorzugt? std::string …

3
Wiederverwendung eines bewegten Containers?
Was ist der richtige Weg, um einen bewegten Container wiederzuverwenden? std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2.clear(); // ver2: "Reset" container = std::vector<int>() // ver3: Reinitialize container.push_back(2); assert(container.size() == 1 && container.front() == 2); Nach dem, was ich im C ++ 0x-Standardentwurf gelesen habe; ver3 …



4
Ressourcen aus den Schlüsseln von std :: map stehlen erlaubt?
Ist es in C ++ in Ordnung, Ressourcen von einer Karte zu stehlen, die ich danach nicht mehr benötige? Genauer gesagt, ich habe einen std::mapmit std::stringSchlüsseln und möchte einen Vektor daraus konstruieren, indem ich die Ressourcen der maps-Schlüssel mit stehle std::move. Beachten Sie, dass ein solcher Schreibzugriff auf die Schlüssel …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.