Articles of unique ptr

Come implementare la funzione make_unique in C ++ 11?

Il mio compilatore non supporta make_unique. Come scriverne uno? template unique_ptr make_unique( Args&&… args );

“Downcasting” unique_ptr a unique_ptr

Ho una serie di fabbriche che restituiscono unique_ptr . Sotto il cofano, tuttavia, forniscono puntatori a vari tipi derivati, ad esempio unique_ptr , unique_ptr , unique_ptr ecc. Dato DerivedA : Derived and Derived : Base avremmo: unique_ptr DerivedAFactory() { return unique_ptr(new DerivedA); } Quello che devo fare è “lanciare” il puntatore dal unique_ptr restituito unique_ptr […]

Come catturare un unique_ptr in un’espressione lambda?

Ho provato il seguente: std::function getAction(std::unique_ptr &&psomething){ //The caller given ownership of psomething return [psomething](){ psomething->do_some_thing(); //psomething is expected to be released after this point }; } Ma non si compila. Qualche idea? AGGIORNARE: Come suggerito, è necessaria una nuova syntax per specificare esplicitamente che è necessario trasferire la proprietà al lambda, ora sto pensando […]

Come utilizzo un deleter personalizzato con un membro std :: unique_ptr?

Ho una lezione con un membro unique_ptr. class Foo { private: std::unique_ptr bar; … }; The Bar è una class di terze parti che ha una funzione create () e una funzione destroy (). Se volessi usare uno std::unique_ptr con esso in una funzione stand alone potrei fare: void foo() { std::unique_ptr bar(create(), [](Bar* b){ […]

std :: unique_ptr con un tipo incompleto non verrà compilato

Sto usando l’idioma pimpl con std::unique_ptr : class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr impl_; // won’t compile }; Tuttavia, ottengo un errore di compilazione relativo all’uso di un tipo incompleto, nella riga 304 in : Applicazione non valida di ” sizeof ” ad un tipo incompleto ” uixx::window::window_impl […]

Differenze tra unique_ptr e shared_ptr

Possibili duplicati: pimpl: shared_ptr o unique_ptr puntatori intelligenti (boost) spiegati Qualcuno potrebbe spiegare le differenze tra shared_ptr e unique_ptr?

Restituzione di unique_ptr dalle funzioni

unique_ptr non consente la costruzione di copie, ma supporta la semantica del movimento. Tuttavia, posso restituire un unique_ptr da una funzione e assegnare il valore restituito a una variabile. #include #include using namespace std; unique_ptr foo() { unique_ptr p( new int(10) ); return p; // 1 //return move( p ); // 2 } int main() […]

Perché non posso push_back un unique_ptr in un vettore?

Cosa c‘è di sbagliato in questo programma? #include #include int main() { std::vector<std::unique_ptr> vec; int x(1); std::unique_ptr 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::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr, _Tp* = […]

make_unique e inoltro perfetto

Perché non esiste un modello di funzione std::make_unique nella libreria standard C ++ 11? io trovo std::unique_ptr p(new SomeUserDefinedType(1, 2, 3)); un po ‘prolisso. Il seguente non sarebbe molto più bello? auto p = std::make_unique(1, 2, 3); Ciò nasconde il new e menziona il tipo una sola volta. Ad ogni modo, ecco il mio tentativo […]

Come posso passare un argomento unique_ptr a un costruttore o una funzione?

Sono nuovo per spostare la semantica in C ++ 11 e non conosco molto bene come gestire i parametri unique_ptr in costruttori o funzioni. Considera questa class riferendosi a se stessa: #include class Base { public: typedef unique_ptr UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void setNext(Base::UPtr n) { next = std::move(n); } protected : Base::UPtr […]