2015-10-09 17 views
8

Was ist die Syntax zum Erstellen von Heap zugewiesene Schließung verwalten von shared_ptr. Ich möchte Schließungen an Funktionen übergeben und in der Lage sein, nullptr zu übergeben. Scheint wie ein shared_ptr< ::std::function<void()> verwenden, aber ich kann die Syntax nicht verstehen zu, dass expresion von einem Lambda-initialisierenC++ 11 Schließung shared_ptr

Antwort

5

es so etwas wie

auto lambda = []() { /* do something usefull */ }; 
auto p = std::make_shared<std::function<void()>>(lambda); 

Aber eigentlich können Sie von nullptr konstruiert werden keine Notwendigkeit shared_ptr, da function kann sein sollte.

std::function<void()> fnc(nullptr); 
4

Im Allgemeinen möchten Sie ein shared_ptr<X> über make_shared erstellen und das Objekt X mit einem Objekt Y initialisieren. Dann in der Regel der Code zu tun, ist

auto ptr = make_shared<X>(someY); 

In Ihrem Fall X ist der std::function-Typ und die someY ist Ihr Lambda. Sobald Sie das haben, ist es ziemlich einfach:

auto funPtr = std::make_shared<function<void()>>([](){ std::cout << "Hello World!\n"; }); 
(*funPtr)(); 
0

Ich bevorzuge shared_ptr innerhalb der Funktion Objekt setzen.

Also, die Daten für die Schließung ist auf dem Haufen und ref-gezählt, während der Griff kopiert und weitergegeben werden kann. Die Daten werden bereinigt, wenn der letzte Griff zerstört wird.