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
8
A
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);
1
Sie können es auf zwei Arten tun:
std::function<void()> lambda = [](){};
auto heapPtr = std::make_shared<std::function<void()>>(lambda);
auto heapPtr2 = new std::function<void()>(lambda);
könnten Sie auch folgende Fragen hilfreich:
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.
Verwandte Themen
- 1. C++ 11 std :: shared_ptr + boost :: serialisierung
- 2. Speicherverwaltung für Lambda in C++ 11
- 3. intrusive_ptr in C++ 11
- 4. C++ shared_ptr mit C++ zuweisen 11 (std :: shared_ptr): Ist es immer noch schlecht, das shared_ptr in eine temporäre Variable zu initialisieren?
- 5. C++ Setzen Zeiger gleich shared_ptr
- 6. C++: shared_ptr von abgeleiteten und fangen Shared_ptr der Basis?
- 7. C++ 11 Smartpointer immer statt neu/löschen?
- 8. C++ Konstruktor mit shared_ptr Mitgliedern
- 9. axAcroPDFLib bei Schließung Problem C#
- 10. Mit C++ 11 Lambdas asynchron, sicher
- 11. Kann C++ 11 unique_ptr und shared_ptr in den jeweils anderen Typ konvertieren?
- 12. In C++ 11 ist "Lambda-Funktion" gleich mit "Lambda-Ausdruck" und "Schließung"?
- 13. C++ 11 Passing 'this' als Paramenter für std :: make_shared
- 14. Parameter/Speichertyp für ein C++ 11 Lambda
- 15. Nachteile von shared_ptr
- 16. Python und C++ 11 für swig: wie aktivieren C++ 11
- 17. Shared_ptr Magie :)
- 18. C++ 11 Zeichenfolge Initialisierung
- 19. C++ 11 Destructor = löschen
- 20. C++ 11 Kommandozeilenparameter Trennung
- 21. C++ 11 private Standardkonstruktors
- 22. C++ 11 ohne Sequenzpunkt?
- 23. C++ 11 Leerflag Klassen
- 24. C++ 11 Regex Matching
- 25. Migration nach C++ 11
- 26. C++ 11: Universal-Testamentsvollstrecker
- 27. C++ 11 - rvalue Referenzvariablen
- 28. Zufällige Doppel C++ 11
- 29. C++ 11 alternativ pthread_cond_timedwait
- 30. C++ 11 entspricht Boost.Format