Paylaşılan kapatma payının shared_ptr tarafından yönetilmesi için kullanılan sözdizimi nedir. Fonksiyonlara kapanmak ve nullptr geçebilmek istiyorum. Bir shared_ptr< ::std::function<void()>
kullanarak gibi görünüyor ama lambda anlatımdaC++ 11 kapatma shared_ptr
8
A
cevap
5
o başlatmak için sözdizimi bilemiyorum Aslında sen function beri gerek shared_ptr
, nullptr
inşa edilebilir bir şey olabilir
auto lambda = []() { /* do something usefull */ };
auto p = std::make_shared<std::function<void()>>(lambda);
gibi Ama olmalıdır.
std::function<void()> fnc(nullptr);
1
Bunu iki şekilde yapabilirsiniz:
std::function<void()> lambda = [](){};
auto heapPtr = std::make_shared<std::function<void()>>(lambda);
auto heapPtr2 = new std::function<void()>(lambda);
Ayrıca kullanışlı Aşağıdaki soruları bulabilirsiniz:
4
Genel olarak,nesnesini aracılığıyla shared_ptr<X>
aracılığıyla oluşturmak ve nesnesini kullanarak nesne oluşturmak. Sonra genellikle bunu kodları durumda
auto ptr = make_shared<X>(someY);
olduğunu X
std::function
türüdür ve someY
senin lamda olduğunu. Bunu aldıktan sonra, oldukça basittir:
auto funPtr = std::make_shared<function<void()>>([](){ std::cout << "Hello World!\n"; });
(*funPtr)();
0
İşlev nesnesinin içinde shared_ptr'yi tercih ederim.
auto o = make_shared<MyData>();
return [o]()
{
...
};
Yani, kapatılması için veri yığın ve sap kopyalanabilir ve çevresinde geçirilebilir ise ref-saydı. Son tutamaç yok olduğunda veriler temizlenir.
İlgili konular
- 1. C++ 11 std :: shared_ptr + boost :: serileştirme
- 2. C++ 11 unique_ptr ve shared_ptr birbirinin türüne dönüştürebilir mi?
- 3. C++ 11
- 4. C++ 11
- 5. C++ 11
- 6. C++ statik sınıflar ve shared_ptr bellek sızıntıları
- 7. En ++ C++ 11 sınıfı C++ 11 referans veya değer olarak
- 8. hızlı aralığı (C++ 11)
- 9. Temperlenmiş sendikalar C++ 11
- 10. C++ 11 - sıralama işlevini
- 11. elle istream C++ 11
- 12. Eşleştirme (C++ 11)
- 13. C++ 11 Regex Eşleşmesi
- 14. C++ 11 tuple performansı
- 15. clang ++ C++ 11 çağırma
- 16. C++ 11 operatörü ""
- 17. boost :: C++ 11
- 18. C++ 11 haritayı başlat
- 19. tr1 arasında paylaşımlar :: shared_ptr ve boost :: shared_ptr?
- 20. harita ve shared_ptr serileştirme?
- 21. C# Soket programlama, pencereleri kapatma
- 22. C# içinde ExchangeService/Atama/Kapatma?
- 23. C# kullanarak Açık Dosyaları Kapatma #
- 24. Forward declarations ve shared_ptr
- 25. bağlama işlevi sonucu C++ C++ 11
- 26. Erişim değerleri C++ 98 ve C++ 11
- 27. sıfırlara bir vektör başlatmak C++/C++ 11
- 28. C++ sarmalayıcı için boost/C++ 11
- 29. C++ 11 Openpoint with clang
- 30. C++ 11 Uygun Yapı Başlatma