Articles of unique ptr

std :: auto_ptr a std :: unique_ptr

Con il nuovo standard in arrivo (e parti già disponibili in alcuni compilatori), il nuovo tipo std::unique_ptr dovrebbe essere un sostituto di 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 a conoscenza di […]

Bene, come funziona il deleter personalizzato di std :: unique_ptr?

Secondo N3290 std::unique_ptr accetta un argomento deleter nel suo costruttore. Tuttavia, non riesco a farlo funzionare con Visual C ++ 10.0 o MinGW g ++ 4.4.1 in Windows, né con g ++ 4.6.1 in Ubuntu. Temo quindi che la mia comprensione di ciò sia incompleta o sbagliata, non riesco a vedere il punto di un […]

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* = […]