Tag: move-semantics

Move-Semantik ist eine Programmier-Sprache-Funktion, ermöglicht eine kopieren-operation ersetzt werden durch eine effizientere „verschieben“, wenn das Quellobjekt ist ein temporäres oder eine anders ablaufende-Objekt.

Umsetzung der Move-Konstruktor durch den Aufruf Move-Zuweisungs-Operator

Anzahl der Antworten 6 Antworten
Dem MSDN-Artikel, Gewusst wie: Schreiben Sie einen Umzug Constuctor, hat die folgende Empfehlung. Wenn Sie beide einen move-Konstruktor und move-Zuweisungs-operator für die Klasse, die Sie beseitigen können, um redundanten code schreiben der move-Konstruktor-Aufruf der move-Zuweisungs-operator. Die folgende

Bewegen unique_ptrs von einem Vektor zu einem anderen

Anzahl der Antworten 1 Antworten
Ich würde gerne verschieben Sie den unique_ptr ' s werden in einer unsortierten Vektor in ein Vektor, enthält die sortierten Vektor von Zeigern. Sicherlich verschieben eines unique_ptr nicht automatisch löschen das element in der ersten Vektor? Wie

Move-Konstruktoren und Statische Arrays

Anzahl der Antworten 4 Antworten
Ich habe die Möglichkeiten der Bewegen Konstruktoren in C++, und ich Frage mich, was sind einige Möglichkeiten der Einnahme von Vorteil, diese Funktion an einem Beispiel, wie unten. Betrachten Sie diesen code: template<unsigned int N> class Foo

Move-only-version von std::function

Anzahl der Antworten 2 Antworten
Weil std::function ist kopierbar, die standard erfordert, dass callables verwendet, um zu konstruieren, es werden auch kopierbar: n337 (20.8.11.2.1) template<class F> function(F f); Erfordert: F werden CopyConstructible. f sind Aufrufbar sein (20.8.11.2) für die argument-Typen ArgTypes -

Nicht-kopierbaren Elemente in Vektor

Anzahl der Antworten 2 Antworten
Ich habe einen nicht-kopierbaren-Klasse (also die Kopie-Konstruktor & Zuweisungs-operator gekennzeichnet sind, als 'löschen'). Ich würde gerne halten Sie diese in einem std::vector. Es ist eine RAII Klasse, so einfach speichern Sie den Zeiger oder Referenz ist es

Ist die Rückkehr mit "std::move" sinnvoll, wenn mehrere return-Anweisungen?

Anzahl der Antworten 1 Antworten
Ich bin mir bewusst, dass es in der Regel nicht eine gute Idee, zurück mit std::move, d.h. bigObject foo() { bigObject result; /*...*/ return std::move(result); } anstatt einfach bigObject foo() { bigObject result; /*...*/ return result; }

Mit move-Semantik mit std::pair oder std::tuple

Anzahl der Antworten 2 Antworten
Angenommen, Sie möchten, um die Vorteile der move-Semantik, aber eine Ihrer beweglichen Klassen braucht, um Teil einer std::pair. Der Zweck wäre, zu erstellen, die eine Funktion zurückgibt, die ein std::pair behandelt werden kann wie eine rvalue und

Warum nicht std::move verhindern RVO?

Anzahl der Antworten 2 Antworten
In vielen Fällen, wenn wieder ein lokal von einer Funktion, RVO kicks in. Allerdings dachte ich, dass explizit mit std::move würde zumindest durchzusetzen, sich zu bewegen, wenn RVO nicht passieren, aber, dass die RVO ist noch immer

Was ist der Vorteil der Verwendung von forwarding-Referenzen in range-basierte for-Schleifen?

Anzahl der Antworten 3 Antworten
const auto& würde genügen, wenn ich möchte nur-lese-Operationen. Ich habe allerdings stieß in for (auto&& e : v) //v is non-const ein paar mal vor kurzem. Das macht mich Frage mich: Ist es möglich, dass in einigen

Kann ich verschieben-ordnen Sie eine std::map-Inhalt in eine weitere std::map?

Anzahl der Antworten 3 Antworten
Ist es möglich, legen Sie den Inhalt des temporären std::map temp in einer anderen std::map m durch die Verwendung von move-Semantik, so dass die Werte aus der temporären nicht kopiert und wiederverwendet werden? Sagen wir mal einer

Move-Konstruktor von abgeleiteten Objekt

Anzahl der Antworten 2 Antworten
Wenn Sie ein abgeleitetes Objekt mit dem Konstruktor, und der Basis-Objekt hat auch move-Semantik, was ist der richtige Weg, um rufen Sie die base-Objekt move-Konstruktor von der abgeleiteten Objekt bewegen Konstruktor? Ich versuchte das naheliegendste zuerst: Derived(Derived&&

Ist der pass-by-value-and-dann-bewegen konstruieren eine schlechte Redewendung?

Anzahl der Antworten 7 Antworten
Da haben wir die move-Semantik in C++, heute ist es üblich, zu tun, void set_a(A a) { _a = std::move(a); } Die Argumentation ist, dass, wenn a ist ein rvalue, wird die Kopie erstellte, und es wird

Wann machen Sie eine Art von nicht-beweglichen in C++11?

Anzahl der Antworten 4 Antworten
War ich überrascht dies nicht zeigen, bis in meine such-Ergebnisse, ich dachte, jemand habe Sie gefragt, bevor, angesichts der Nützlichkeit der move-Semantik in C++11: Wann muss ich (oder ist es eine gute Idee für mich zu) machen

Was kann ich tun, mit ein verschoben-aus Objekt?

Anzahl der Antworten 2 Antworten
Nicht die standard definieren genau, was ich tun kann, mit ein Objekt, sobald es verschoben wurde? Ich pflegte zu denken, dass alles, was Sie tun können, mit ein verschoben-vom Objekt ist zu tun zerstören es, aber das

warum ist der Destruktor-Aufruf nach dem std::move erforderlich?

Anzahl der Antworten 1 Antworten
In Der Programmiersprache C++ Edition 4 es ist ein Beispiel für ein Vektor-Implementierung, siehe entsprechende code am Ende der Nachricht. uninitialized_move() initialisiert neuen T-Objekte in neuen Speicherbereich, indem Sie Sie aus den alten Speicherbereich. Dann ruft er

initializer_list und move-Semantik

Anzahl der Antworten 6 Antworten
Bin ich erlaubt, sich zu bewegen, Elemente aus einem 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? } } Seit std::intializer_list<T> erfordert

Warum ist "std::move` mit dem Namen `std::move"?

Anzahl der Antworten 2 Antworten
C++11 std::move(x) Funktion nicht wirklich nach überhaupt nichts. Es ist nur eine Besetzung an den r-Wert. Warum wurde das gemacht? Ist das nicht irreführend? Erschwerend kommt hinzu, dass die drei-argument std::move tatsächlich bewegt.. Und vergessen Sie nicht

Was ist der Vorteil bei der Verwendung von universal-Referenzen in range-basierte for-Schleifen?

Anzahl der Antworten 3 Antworten
const auto& würde genügen, wenn ich möchte nur-lese-Operationen. Ich habe allerdings stieß in for (auto&& e : v) //v is non-const ein paar mal vor kurzem. Das macht mich Frage mich: Ist es möglich, dass in einigen

Was ist "rvalue Referenz für *diese"?

Anzahl der Antworten 3 Antworten
Kam über einen Vorschlag namens "rvalue Referenz für *diese" ertönt C++11-status-Seite. Ich habe einiges gelesen über rvalue-Referenzen und verstanden, aber ich glaube nicht, dass ich weiß, über diese. Ich konnte auch nicht viel Ressourcen auf dem web

Wie zu erzwingen, move-Semantik, wenn ein Vektor wächst?

Anzahl der Antworten 3 Antworten
Ich habe eine std::vector von Objekten einer bestimmten Klasse A. Die Klasse ist nicht-trivial und die copy-Konstruktoren und bewegen Konstruktoren definiert. std::vector<A> myvec; Wenn ich tanken den Vektor mit A Objekte (mit z.B. myvec.push_back(a)), der Vektor wird

Kann ich die Liste initialisieren einen Vektor verschieben-nur eine Art?

Anzahl der Antworten 5 Antworten
Wenn ich übergeben Sie den folgenden code durch mein GCC 4.7 Momentaufnahme, es versucht zu kopieren, die unique_ptrs in den Vektor. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(),

Move-Semantik, wenn die sendende Objekt als Funktionsparameter

Anzahl der Antworten 4 Antworten
Ich Spiele mit move-Konstruktoren und move-Zuordnungen und ich habe stolperte über dieses problem. Erster code: #include <iostream> #include <utility> class Foo { public: Foo() {} Foo(Foo&& other) { value = std::move(other.value); other.value = 1; //since it's int!

Gibt es irgendeinen Fall, wo eine Rückkehr von einer RValue-Referenz (&&) ist sinnvoll?

Anzahl der Antworten 5 Antworten
Gibt es einen Grund, wenn eine Funktion zurückgeben sollte eine RValue-Referenz? Eine Technik, oder trick, oder ein idiom oder Muster? MyClass&& func( ... ); Ich bin mir der Gefahr bewusst Rückgabe Referenzen im Allgemeinen, aber manchmal tun

Lvalue um rvalue Referenz verbindlich

Anzahl der Antworten 1 Antworten
Der compiler hält sich beschweren ich bin versucht zu binden eine lvalue, um eine rvalue-Referenz, aber ich sehe nicht, wie. Ich bin neu in C++11, move-Semantik, etc., also bitte Geduld mit mir. Habe ich diese Funktion: template

Die Effizienz von C++11 push_back() mit std::move versus emplace_back() für die bereits errichteten Objekte

Anzahl der Antworten 2 Antworten
In C++11 emplace_back() ist in der Regel bevorzugt (im Sinne von Effizienz) push_back() da es ermöglicht, in-place-Konstruktion, aber ist dies immer noch der Fall, wenn mit push_back(std::move()) mit einem bereits gebauten Objekt? Beispielsweise ist emplace_back() noch bevorzugt

Was ist std :: move () und wann sollte es verwendet werden?

Anzahl der Antworten 6 Antworten
Was ist es? Was tut es? Wann sollte es verwendet werden? Gute links sind geschätzt. InformationsquelleAutor der Frage Basilevs | 2010-08-05

Welchen Vorteil bietet die Verwendung von universellen Referenzen in bereichsbasierten for-Schleifen?

Anzahl der Antworten 3 Antworten
const auto& würde genügen, wenn ich möchte nur-lese-Operationen. Ich habe allerdings stieß in for (auto&& e : v) //v is non-const ein paar mal vor kurzem. Das macht mich Frage mich: Ist es möglich, dass in einigen

Warum kein Standard-move-assignment / move-constructor?

Anzahl der Antworten 4 Antworten
Ich bin ein einfacher Programmierer. Meine Klasse member-Variablen am häufigsten besteht der POD-Typen und STL-Containern. Da ich nur selten schreiben Zuweisungsoperatoren oder copy-Konstruktoren, da diese standardmäßig implementiert. Hinzu, wenn ich std::move auf Objekte, nicht beweglich, es verwendet

Ist dies die korrekte Verwendung von C ++ 'move' Semantik?

Anzahl der Antworten 4 Antworten
Heute Abend habe ich schon einen Blick auf einige code, mit dem ich gearbeitet habe in den letzten paar Tagen, und begann zu Lesen, bis auf move-Semantik, insbesondere std::move. Ich habe ein paar Fragen an Euch Profis,

C ++ 11 Rvalues ​​und verschieben Semantik Verwirrung (Return-Anweisung)

Anzahl der Antworten 5 Antworten
Ich versuche zu verstehen, rvalue-Referenzen und move-Semantik in C++11. Was ist der Unterschied zwischen diesen Beispielen und die von Ihnen tun wird, keine Vektor-Kopie? Ersten Beispiel std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref

Warum verwenden manche Leute Swap für Verschiebungsaufträge?

Anzahl der Antworten 4 Antworten
Beispielsweise stdlibc++ verfügt über die folgenden: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*this); __u._M_device = 0; __u._M_owns = false; return *this; } Warum nicht nur weisen die beiden __u-Mitglieder *dieses direkt? Nicht die swap-bedeuten, dass __u "

Wie ersetze Bewegungssemantik, wenn ein Vektor wächst?

Anzahl der Antworten 3 Antworten
Ich habe eine std::vector von Objekten einer bestimmten Klasse A. Die Klasse ist nicht-trivial und die copy-Konstruktoren und bewegen Konstruktoren definiert. std::vector<A> myvec; Wenn ich tanken den Vektor mit A Objekte (mit z.B. myvec.push_back(a)), der Vektor wird

Gibt es einen Fall, in dem die Rückgabe einer RValue-Referenz (& amp; & amp; amp; & amp; & amp; amp; & amp; & amp; amp; & amp; & amp ;;

Anzahl der Antworten 5 Antworten
Gibt es einen Grund, wenn eine Funktion zurückgeben sollte eine RValue-Referenz? Eine Technik, oder trick, oder ein idiom oder Muster? MyClass&& func( ... ); Ich bin mir der Gefahr bewusst Rückgabe Referenzen im Allgemeinen, aber manchmal tun

Kann ich einen Vektor vom Nur-Bewegungstyp initialisieren?

Anzahl der Antworten 5 Antworten
Wenn ich übergeben Sie den folgenden code durch mein GCC 4.7 Momentaufnahme, es versucht zu kopieren, die unique_ptrs in den Vektor. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(),

Warum sollte ich std :: einen std :: shared_ptr verschieben?

Anzahl der Antworten 5 Antworten
Bin ich auf der Suche durch die Clang-source-codeund ich fand das snippet: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Warum möchte ich zu std::move eine std::shared_ptr? Gibt es einen Punkt der übertragung von Eigentum auf

Kann modernes C ++ Ihnen Leistung kostenlos bringen?

Anzahl der Antworten 2 Antworten
Es wird manchmal behauptet, dass C++11/14 zu erhalten, kann ein performance-boost, selbst wenn lediglich das kompilieren von C++98 code. Die Begründung ist in der Regel entlang der Linien von move-Semantik, da in einigen Fällen die rvalue-Konstruktoren werden

Verwenden Sie std :: move mit std :: shared_ptr

Anzahl der Antworten 1 Antworten
Habe ich eine Funktion wie folgt definiert: void foo(std::shared_ptr<X> x) { ... }; Wenn ich erkläre ein shared ptr zu X: std::shared_ptr<X> sourcePtr(new X(...)); Kann ich dann anrufen foo wie folgt: foo(std::move(sourcePtr)); oder foo(sourcePtr); Ich verstehe, dass

push_back vs emplace_back

Anzahl der Antworten 6 Antworten
Ich bin ein wenig verwirrt über den Unterschied zwischen push_back und emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Da es eine push_back überlastung der Einnahme eine rvalue Referenz, die ich nicht ganz sehen,

Verschieben Sie den Zuweisungsoperator und `if (this! = & Amp; rhs)`

Anzahl der Antworten 6 Antworten
In der Zuweisungsoperator der Klasse, müssen Sie in der Regel zu prüfen, ob das Objekt zugeordnet ist, die dem aufrufenden Objekt, so dass Sie nicht die Schraube Dinge: Class& Class::operator=(const Class& rhs) { if (this != &rhs)

Wie überträgt std :: move () Werte in RValues?

Anzahl der Antworten 2 Antworten
Fand ich mich selbst nicht vollständig verstehen, die Logik der std::move(). Zuerst habe ich es gegoogelt, aber scheint, wie es gibt nur die Dokumente über die Verwendung std::move() sind, nicht, wie seine Struktur funktioniert. Ich meine, ich

Warum wird beim Verschieben einer Zeigervariablen diese nicht auf null gesetzt?

Anzahl der Antworten 4 Antworten
Bei der Implementierung von move-Konstruktoren und move-Zuweisungsoperatoren, die man oft schreibt code wie folgt: p = other.p; other.p = 0; Den implizit definierten move-Operationen implementiert werden, mit code wie diesem: p = std::move(other.p); Wäre falsch, da bewegt

Verschieben oder benannte Rückgabewertoptimierung (NRVO)?

Anzahl der Antworten 1 Antworten
Können sagen, wir haben folgenden code: std::vector<int> f() { std::vector<int> y; ... return y; } std::vector<int> x = ... x = f(); Scheint es, hat der compiler die beiden Ansätze hier: (a) NRVO: Destruct x, dann konstruieren

Richtiger Weg (Verschiebungssemantik), um einen std :: vector von der Funktion zurückzugeben, die in C ++ 11 aufruft

Anzahl der Antworten 3 Antworten
Will ich füllen std::vector (oder eine andere STL-container): class Foo { public: Foo(int _n, const Bar &_m); private: std::vector<Foo> fooes_; } 1.Gut aussehende ctor, teuer Leistung std::vector<Foo> get_vector(int _n, const Bar &_m) { std::vector<Foo> ret; ... //filling

Was ist "rvalue Referenz für * das"?

Anzahl der Antworten 3 Antworten
Kam über einen Vorschlag namens "rvalue Referenz für *diese" ertönt C++11-status-Seite. Ich habe einiges gelesen über rvalue-Referenzen und verstanden, aber ich glaube nicht, dass ich weiß, über diese. Ich konnte auch nicht viel Ressourcen auf dem web

Korrekte Verwendung von `= delete` für Methoden in Klassen

Anzahl der Antworten 2 Antworten
Ist das folgende snipplet richtige für un-Definition alle anderweitig generierten Methoden und Konstruktoren für eine Klasse? struct Picture { //'explicit': no accidental cast from string to Picture explicit Picture(const string &filename) { /* load image from file

Wie verwende ich ein benutzerdefiniertes Löschelement mit einem std :: unique_ptr-Member?

Anzahl der Antworten 4 Antworten
Habe ich eine Klasse mit einem unique_ptr Mitglied. class Foo { private: std::unique_ptr<Bar> bar; ... }; Die Bar ist eine Dritte Klasse, hat ein create () - Funktion und eine destroy () - Funktion. Wenn ich wollte

Ist ein `= default`-Move-Konstruktor äquivalent zu einem memberweisen Move-Konstruktor?

Anzahl der Antworten 4 Antworten
Ist diese struct Example { int a, b; Example(int mA, int mB) : a{mA}, b{mB} { } Example(const Example& mE) : a{mE.a}, b{mE.b} { } Example(Example&& mE) : a{move(mE.a)}, b{move(mE.b)} { } Example& operator=(const Example& mE) {

Übertragen des Eigentums von Objekt von einem unique_ptr zu einem anderen unique_ptr in C ++ 11?

Anzahl der Antworten 2 Antworten
In C++11 wir übertragen das Eigentum an einem Objekt auf ein anderes unique_ptr mit std::move(). Nach dem transfer des Eigentums, die smart-pointer, die das Eigentum abgetreten wird null und get() zurück nullptr. std::unique_ptr<int> p1(new int(42)); std::unique_ptr<int> p2

C ++ 11 Move-Konstruktor

Anzahl der Antworten 5 Antworten
Was wäre die richtige Art und Weise zu implementieren, die einen move-Konstruktor, unter Berücksichtigung der folgenden Klasse: class C { public: C(); C(C&& c); private: std::string string; } Natürlich, die Idee ist zu vermeiden, kopieren string oder