shared_ptr द्वारा प्रबंधित हेप आवंटित बंद करने के लिए वाक्यविन्यास क्या है। मैं कार्यों को बंद करना चाहता हूं और नलप्टर पास करने में सक्षम हूं। एक shared_ptr< ::std::function<void()>
का उपयोग कर की तरह लगता है, लेकिन मैं वाक्य रचना समझ नहीं सकता प्रारंभ करने में है कि एक लैम्ब्डा expresionसी ++ 11 बंद share_ptr
8
A
उत्तर
5
से यह होना चाहिए कुछ
तरहauto lambda = []() { /* do something usefull */ };
auto p = std::make_shared<std::function<void()>>(lambda);
लेकिन वास्तव में आप की कोई जरूरत नहीं shared_ptr
, function के बाद से nullptr
से निर्माण किया जा सकता हो सकता है।
std::function<void()> fnc(nullptr);
1
आप दो तरह से यह कर सकते हैं:
std::function<void()> lambda = [](){};
auto heapPtr = std::make_shared<std::function<void()>>(lambda);
auto heapPtr2 = new std::function<void()>(lambda);
तुम भी उपयोगी निम्न सवालों खोज सकते हैं:
4
आम तौर पर, आप ऑब्जेक्ट के साथ X
ऑब्जेक्ट को प्रारंभ करते हुए make_shared
के माध्यम से shared_ptr<X>
बनाना चाहते हैं, X
ऑब्जेक्ट को प्रारंभ करना। तो आम तौर पर ऐसा करने के लिए कोड
auto ptr = make_shared<X>(someY);
आपके मामले में है, X
std::function
प्रकार है, और someY
अपने लैम्ब्डा है। एक बार आपके पास यह हो जाने के बाद, यह बहुत सीधे आगे है:
auto funPtr = std::make_shared<function<void()>>([](){ std::cout << "Hello World!\n"; });
(*funPtr)();
0
मैं फ़ंक्शन ऑब्जेक्ट के अंदर shared_ptr डालना पसंद करता हूं।
auto o = make_shared<MyData>();
return [o]()
{
...
};
तो, बंद करने के लिए डेटा के ढेर पर है और रेफरी बार गणना करते हुए संभाल की नकल की और आसपास पारित किया जा सकता। अंतिम संभाल नष्ट होने पर डेटा साफ़ हो जाता है।
संबंधित मुद्दे
- 1. सी ++ 11 share_ptr से वेक्टर और कक्षा
- 2. share_ptr
- 3. सी ++ share_ptr व्युत्पन्न कक्षा
- 4. share_ptr
- 5. सी ++ 11
- 6. सी ++ 11 लैम्ब्डा सिंटैक्स में, ढेर आवंटित बंद?
- 7. अनन्य_प्टर बनाम share_ptr
- 8. बूस्टर share_ptr को कन्स्ट्रक्टर
- 9. share_ptr ऑब्जेक्ट समानता
- 10. क्यूटी निर्माता, सी ++ 11
- 11. सी ++ 11
- 12. सी ++ 11
- 13. सी ++ 11
- 14. सी ++ 11
- 15. सी ++ 11
- 16. सी ++ 11
- 17. सी ++ 11
- 18. सी ++ 11
- 19. सी ++ 11
- 20. सी ++ 11
- 21. सी ++ 11
- 22. सी ++ 11
- 23. सी ++ 11
- 24. सी 11
- 25. सी ++ 11
- 26. सी 11
- 27. सी ++ 11
- 28. सी ++ 11
- 29. सी ++ 11
- 30. सी 11