std :: unique_ptr ist ein intelligenter Zeiger, der über einen Zeiger das alleinige Eigentum an einem Objekt behält. unique_ptr kann nicht kopiert oder kopiert werden. Zwei Instanzen von unique_ptr können nicht dasselbe Objekt verwalten.
Ich bin neu in der Verschiebung der Semantik in C ++ 11 und weiß nicht genau, wie ich mit unique_ptrParametern in Konstruktoren oder Funktionen umgehen soll . Betrachten Sie diese Klasse, die sich selbst referenziert: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void …
unique_ptr<T>erlaubt keine Kopierkonstruktion, sondern unterstützt die Verschiebungssemantik. Dennoch kann ich a zurückgebenunique_ptr<T> von einer Funktion zurückgeben und den zurückgegebenen Wert einer Variablen zuweisen. #include <iostream> #include <memory> using namespace std; unique_ptr<int> foo() { unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); // 2 } int …
Ich habe einen Code in einem Header, der so aussieht: #include <memory> class Thing; class MyClass { std::unique_ptr< Thing > my_thing; }; Wenn ich diesen Header in eine ThingCPP einbinde, die die Typdefinition nicht enthält , wird dies unter VS2010-SP1 nicht kompiliert: 1> C: \ Programme (x86) \ Microsoft Visual …
std::unique_ptr unterstützt Arrays, zum Beispiel: std::unique_ptr<int[]> p(new int[10]); aber wird es gebraucht? wahrscheinlich ist es bequemer zu bedienen std::vectoroder std::array. Finden Sie eine Verwendung für dieses Konstrukt?
Was ist los mit diesem Programm? #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } Der Fehler: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const …
Warum gibt es std::make_uniquein der Standard-C ++ 11-Bibliothek keine Funktionsvorlage? ich finde std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); ein bisschen ausführlich. Wäre das Folgende nicht viel schöner? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Dies verbirgt das newschön und erwähnt den Typ nur einmal. Wie auch immer, hier ist mein Versuch einer …
Ich benutze das Pimpl-Idiom mit std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; Ich erhalte jedoch einen Kompilierungsfehler bezüglich der Verwendung eines unvollständigen Typs in Zeile 304 in <memory>: Ungültige Anwendung von ' sizeof' auf einen unvollständigen Typ ' …
Mit dem neuen Standard (und Teilen, die bereits in einigen Compilern verfügbar sind) soll der neue Typ std::unique_ptrein Ersatz für sein std::auto_ptr. Überlappt sich ihre Verwendung genau (damit ich meinen Code global suchen / ersetzen kann (nicht, dass ich dies tun würde, aber wenn ich es tun würde)) oder sollte …
Ich habe Probleme, die Verwendung intelligenter Zeiger als Klassenmitglieder in C ++ 11 zu verstehen. Ich habe viel über intelligente Zeiger gelesen und glaube zu verstehen, wie unique_ptrund shared_ptr/ oder wie ich weak_ptrim Allgemeinen arbeite. Was ich nicht verstehe, ist die tatsächliche Verwendung. Es scheint, als würde jeder empfehlen unique_ptr, …
Ich habe eine Klasse mit einem unique_ptr-Mitglied. class Foo { private: std::unique_ptr<Bar> bar; ... }; Die Leiste ist eine Klasse von Drittanbietern mit einer Funktion create () und einer Funktion destroy (). Wenn ich a std::unique_ptrdamit in einer eigenständigen Funktion verwenden wollte, könnte ich Folgendes tun: void foo() { std::unique_ptr<Bar, …
Hat std::make_uniqueirgendwelche Effizienzvorteile wie std::make_shared? Im Vergleich zum manuellen Erstellen std::unique_ptr: std::make_unique<int>(1); // vs std::unique_ptr<int>(new int(1));
Die Frage passt wirklich in den Titel: Ich bin gespannt, was der technische Grund für diesen Unterschied ist, aber auch die Gründe? std::shared_ptr<void> sharedToVoid; // legal; std::unique_ptr<void> uniqueToVoid; // ill-formed;
Bietet die C ++ 11-Standardbibliothek ein Dienstprogramm zum Konvertieren von a std::shared_ptrnach std::unique_ptroder umgekehrt? Ist das ein sicherer Betrieb?
Wie kann ich ein std::unique_ptrin eine Funktion übergeben? Nehmen wir an, ich habe folgende Klasse: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; Folgendes wird nicht kompiliert: void MyFunc(unique_ptr<A> arg) { cout << arg->GetVal() << endl; } …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.