2015-10-09 4 views
8

shared_ptr द्वारा प्रबंधित हेप आवंटित बंद करने के लिए वाक्यविन्यास क्या है। मैं कार्यों को बंद करना चाहता हूं और नलप्टर पास करने में सक्षम हूं। एक shared_ptr< ::std::function<void()> का उपयोग कर की तरह लगता है, लेकिन मैं वाक्य रचना समझ नहीं सकता प्रारंभ करने में है कि एक लैम्ब्डा expresionसी ++ 11 बंद share_ptr

उत्तर

5

से यह होना चाहिए कुछ

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

लेकिन वास्तव में आप की कोई जरूरत नहीं shared_ptr, function के बाद से nullptr से निर्माण किया जा सकता हो सकता है।

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

आम तौर पर, आप ऑब्जेक्ट के साथ X ऑब्जेक्ट को प्रारंभ करते हुए make_shared के माध्यम से shared_ptr<X> बनाना चाहते हैं, X ऑब्जेक्ट को प्रारंभ करना। तो आम तौर पर ऐसा करने के लिए कोड

auto ptr = make_shared<X>(someY); 

आपके मामले में है, Xstd::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]() 
{ 
    ... 
}; 

तो, बंद करने के लिए डेटा के ढेर पर है और रेफरी बार गणना करते हुए संभाल की नकल की और आसपास पारित किया जा सकता। अंतिम संभाल नष्ट होने पर डेटा साफ़ हो जाता है।