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.
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
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
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
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 -
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
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; }
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
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
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
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
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&&
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
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
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
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
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
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
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
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
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
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(),
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!
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
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
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
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
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
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
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,
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
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 "
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
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
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(),
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
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
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
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,
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)
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
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
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
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
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
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
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
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) {
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
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