std :: unique_ptr è un puntatore intelligente che mantiene la proprietà esclusiva di un oggetto tramite un puntatore. unique_ptr non è copiabile o assegnabile tramite copia, due istanze di unique_ptr non possono gestire lo stesso oggetto.
Sono nuovo di spostare la semantica in C ++ 11 e non so molto bene come gestire i unique_ptrparametri nei costruttori o nelle funzioni. Considera questa classe che fa riferimento a se stessa: #include <memory> class Base { public: typedef unique_ptr<Base> UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void setNext(Base::UPtr n) …
unique_ptr<T>non consente la costruzione di copie, ma supporta la semantica di spostamento. Tuttavia, posso restituire a unique_ptr<T>da una funzione e assegnare il valore restituito a una variabile. #include <iostream> #include <memory> using namespace std; unique_ptr<int> foo() { unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); …
Ho un po 'di codice in un'intestazione che assomiglia a questo: #include <memory> class Thing; class MyClass { std::unique_ptr< Thing > my_thing; }; Se includo questa intestazione in un cpp che non include la Thingdefinizione del tipo, questo non viene compilato in VS2010-SP1: 1> C: \ Programmi (x86) \ Microsoft …
std::unique_ptr supporta gli array, ad esempio: std::unique_ptr<int[]> p(new int[10]); ma è necessario? probabilmente è più comodo da usare std::vectoro std::array. Trovi utile per quel costrutto?
Cosa c'è di sbagliato in questo programma? #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; } L'errore: 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 …
Perché non esiste un std::make_uniquemodello di funzione nella libreria C ++ 11 standard? io trovo std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); un po 'prolisso. Quanto segue non sarebbe molto più bello? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Questo nasconde newbene e menziona il tipo solo una volta. Ad ogni modo, ecco …
Sto usando l'idioma pimpl con std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; Tuttavia, viene visualizzato un errore di compilazione relativo all'uso di un tipo incompleto, nella riga 304 in <memory>: Applicazione non valida di " sizeof" a un …
Con il nuovo standard in arrivo (e parti già disponibili in alcuni compilatori), il nuovo tipo std::unique_ptrdovrebbe essere un sostituto per std::auto_ptr. Il loro utilizzo si sovrappone esattamente (quindi posso fare una ricerca / sostituzione globale sul mio codice (non che lo farei, ma se lo facessi)) o dovrei essere …
Sto riscontrando problemi nel comprendere l'utilizzo dei puntatori intelligenti come membri della classe in C ++ 11. Ho letto molto sui puntatori intelligenti e penso di capire come unique_ptre shared_ptr/ o weak_ptrlavorare in generale. Quello che non capisco è il reale utilizzo. Sembra che tutti raccomandino di usarlo unique_ptrcome modo …
Ho una lezione con un membro unique_ptr. class Foo { private: std::unique_ptr<Bar> bar; ... }; La barra è una classe di terze parti che ha una funzione create () e una funzione destroy (). Se volessi usare a std::unique_ptrcon esso in una funzione autonoma, potrei fare: void foo() { std::unique_ptr<Bar, …
Ha std::make_uniquedei vantaggi in termini di efficienza come std::make_shared? Rispetto alla costruzione manuale std::unique_ptr: std::make_unique<int>(1); // vs std::unique_ptr<int>(new int(1));
La domanda rientra davvero nel titolo: sono curioso di sapere qual è la ragione tecnica di questa differenza, ma anche la logica? std::shared_ptr<void> sharedToVoid; // legal; std::unique_ptr<void> uniqueToVoid; // ill-formed;
Per quanto ho capito, C ++ 14 è stato introdotto std::make_uniqueperché, a causa della mancata specificazione dell'ordine di valutazione dei parametri, questo non era sicuro: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Spiegazione: se la valutazione alloca prima la memoria per il puntatore non elaborato, quindi chiama g()e viene generata un'eccezione …
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.