Qual è la sintassi per creare heap allocato chiusura gestita da shared_ptr. Voglio passare le chiusure alle funzioni ed essere in grado di passare nullptr. Sembra come usare un shared_ptr< ::std::function<void()>
ma non riesco a capire la sintassi per inizializzare che da una lambda expresionC++ 11 closure shared_ptr
8
A
risposta
5
Dovrebbe essere qualcosa di simile
auto lambda = []() { /* do something usefull */ };
auto p = std::make_shared<std::function<void()>>(lambda);
Ma in realtà si può bisogno shared_ptr
, dal momento che function può essere costruito da nullptr
.
std::function<void()> fnc(nullptr);
1
Si può fare in due modi:
std::function<void()> lambda = [](){};
auto heapPtr = std::make_shared<std::function<void()>>(lambda);
auto heapPtr2 = new std::function<void()>(lambda);
Si potrebbe anche trovare le seguenti domande utili:
4
In generale, si desidera creare un shared_ptr<X>
tramite make_shared
, inizializzando l'oggetto X
con l'oggetto Y
. Poi in genere del codice per farlo è
auto ptr = make_shared<X>(someY);
Nel tuo caso, X
è il tipo std::function
, e il someY
è il vostro lambda. Una volta ottenuto ciò, è piuttosto semplice:
auto funPtr = std::make_shared<function<void()>>([](){ std::cout << "Hello World!\n"; });
(*funPtr)();
0
Preferisco mettere shared_ptr all'interno dell'oggetto funzione.
auto o = make_shared<MyData>();
return [o]()
{
...
};
Quindi, i dati per la chiusura è sul mucchio e ref-contato mentre il manico può essere copiato e passato intorno. I dati vengono ripuliti quando l'ultima maniglia viene distrutta.
Problemi correlati
- 1. C++ 11 std :: shared_ptr + boost :: serializzazione
- 2. operazioni atomiche per shared_ptr in C++ 11
- 3. C++ allocazione di shared_ptr con C++ 11 (std :: shared_ptr): è ancora male inizializzare il parametro shared_ptr in una variabile temporanea?
- 4. Semantica C++ 11 "auto"
- 5. intrusive_ptr in C++ 11
- 6. Come gestire l'evoluto C++ std :: namespace? es: std :: tr1 :: shared_ptr vs. std :: shared_ptr vs boost :: shared_ptr vs boost :: tr1 :: shared_ptr
- 7. C++ shared_ptr di stack object
- 8. shared_ptr e riferimenti in C++
- 9. C++ 11 unique_ptr e shared_ptr è in grado di convertire il tipo dell'altro?
- 10. Python lambda closure scoping
- 11. const shared_ptr to shared_ptr
- 12. C++ 11 Passaggio 'questo' come paramenter per std :: make_shared
- 13. C++ 11 puntatori intelligenti e polimorfismo
- 14. Svantaggi di shared_ptr
- 15. C++ 11 Template Method specializzazione per tipo di ritorno
- 16. Utilizzo di shared_ptr nelle interfacce C?
- 17. Domande sugli usi di shared_ptr - C++
- 18. C++ pointer raw e std :: shared_ptr
- 19. C++ 11 unordered_set con std :: owner_less-like hashing
- 20. Passa un shared_ptr a OpenGL?
- 21. Inizializzazione stringa C++ 11
- 22. C++ 11 std :: array
- 23. C++ 11 Destructor = delete
- 24. clang ++ C++ 11 invocazione
- 25. È valido C++ 11
- 26. Controllo funzionalità C++ 11
- 27. Macro predefinita C++ 11
- 28. pahole C++ 11 supporto?
- 29. C++ 11 numeri casuali
- 30. C++ 11: esecutore universale