के कंटेनर पर इटरेटिंग एक कंटेनर से स्वामित्व को दूर किए बिना किसी कंटेनर (एक इटरेटर के माध्यम से) के अद्वितीय_ptr तत्वों को कैसे एक्सेस करता है? जब किसी को कंटेनर में किसी तत्व के लिए पुनरावर्तक प्राप्त होता है तो वह कंटेनर के साथ तत्व स्वामित्व है? अनन्य_प्टर तक पहुंच प्राप्त करने के लिए जब कोई इटरेटर को अस्वीकार करता है तो कैसा होता है? क्या यह unique_ptr का एक अंतर्निहित कदम करता है?unique_ptr के
मुझे लगता है कि मैं एक कंटेनर (मूल्य से नहीं) में तत्वों को स्टोर करने की आवश्यकता होने पर साझा_ptr का उपयोग कर रहा हूं, भले ही कंटेनर अवधारणात्मक रूप से तत्वों का मालिक हो और अन्य कोड बस कंटेनर में तत्वों में हेरफेर करना चाहता हो, क्योंकि मैं मैं वास्तव में बिना किसी स्वामित्व के कंटेनर में अद्वितीय_ptr तत्वों तक पहुंचने में सक्षम नहीं होने से डरता हूं।
कोई अंतर्दृष्टि?
ठीक है मुझे लगता है कि मेरे लिए चीजों को स्पष्ट करता है। मैं एक लैम्ब्डा के साथ नए for_each फ़ंक्शन का उपयोग करने की आदत में रहा हूं जिसका पैरामीटर मान द्वारा पारित तत्व है, संदर्भ के अनुसार नहीं, लेकिन मुझे लगता है कि मुझे इसे अद्वितीय_ptr तत्वों के संदर्भ में बनाना होगा यदि मैं किसी प्रयास से बचना चाहता हूं प्रतिलिपि/चालें। अनुलेख अगर मैं एक बार इटरेटर को अस्वीकार करता हूं, और उस परिणाम का संदर्भ लेता हूं, तो मुझे लगता है कि यह एक प्रयास की गई प्रतिलिपि से बचाता है? मेरा मतलब है: 'के लिए (कंटेनर :: iterator it = container.begin(); it! = Container.end(); यह ++) { unique_ptr और तत्व = &*it; // कोई प्रयास प्रतिलिपि नहीं है? } ' धन्यवाद हॉवर्ड, बीटीडब्ल्यू। –
हाँ, मुझे लगता है कि ठीक काम करना चाहिए। यद्यपि आपके पास अपने कोड में अतिरिक्त '&' है। लेकिन संकलक आपको बताएगा कि कहां है। –
आपको इसे किसी को अस्वीकार करने में सक्षम होना चाहिए: blah और element = ** it; अभी भी एक प्रतिलिपि के बिना, मुझे लगता है। (शायद अधिक उपयोगी।) –