मान लें कि मेरे पास दो स्थानीय स्मार्ट पॉइंटर्स हैं, foo
और bar
।सी ++ 11: लैम्बडा कैप्चर किस आदेश में नष्ट हो गया है?
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
ये स्मार्ट संकेत दिए गए संसाधनों के आसपास रैपर कि किसी कारण से आदेश foo
, तो bar
में विलुप्त किया जाना चाहिए।
अब मैं एक लैम्ब्डा बनाना चाहता हूं जो foo
और bar
का उपयोग करता है, लेकिन इसमें शामिल दायरे से बाहर निकलता है। इसलिए मैं, मान द्वारा उनमें कब्जा था इस तरह:
auto lambda = [foo, bar]() { ... };
इस समारोह वस्तु के भीतर foo
और bar
की प्रतियां बनाता है। जब फ़ंक्शन ऑब्जेक्ट को नष्ट कर दिया जाता है, तो इन प्रतियों को भी नष्ट कर दिया जाएगा, लेकिन मुझे उस क्रम के बारे में परवाह है जिसमें यह होता है। तो मेरा सवाल है:
जब एक लैम्ब्डा ऑब्जेक्ट नष्ट हो जाता है, तो इसके द्वारा मूल्यवान मूल्यों को किस क्रम में नष्ट किया जाता है? और मैं इस उम्मीद को कैसे प्रभावित कर सकता हूं?
मुझे लगता है कि यह भी विचार करने के लिए दिलचस्प हो जाएगा '[=]'। –
@ आर। मार्टिनिन्हो फर्नांडीस: '[foo, bar]' '[= foo, = bar] 'के बराबर है, यानी यह एक प्रति है। –
@ डेविड: मुझे लगता है कि उनका शाब्दिक अर्थ था '[=]', यानी विचार करें कि घोषणापत्र आदेश किसी के स्वयं को सूचीबद्ध किए बिना क्या होगा। (स्पष्ट रूप से यह अब एक महत्वपूर्ण मुद्दा है क्योंकि घोषणापत्र आदेश कैप्चर करने के तरीके के बावजूद घोषणा आदेश निर्दिष्ट नहीं है।) – ildjarn