जब आप नोड्स के माध्यम से जाना है, तो आप नोड सूचक है, जिसका अर्थ ही की जरूरत नहीं है कि
यहाँ = यहाँ> अगले;
गलत है अगर यह एक अद्वितीय_ptr है। किसी ऑब्जेक्ट का स्वामित्व का अर्थ है "इसके जीवन और मृत्यु के लिए ज़िम्मेदार होना" जिसका अर्थ है मालिक ही वह व्यक्ति है जिसने ऑब्जेक्ट को नष्ट कर दिया है। यदि आप स्वामित्व की एक और परिभाषा का उपयोग करते हैं, तो यह नहीं है कि unique_ptr का अर्थ क्या है।
आप सूची नोड कोड हैं, आप मानते हैं कि प्रत्येक नोड अगले नोड के लिए ज़िम्मेदार है (यदि आप नोड को नष्ट करते हैं, तो सभी अगले नोड भी नष्ट हो जाएंगे)। यह वैध व्यवहार हो सकता है, यह आपकी आवश्यकताओं पर निर्भर करता है, बस सुनिश्चित करें कि आप वास्तव में यही चाहते हैं।
आप जो भी चाहते हैं उसके बिना पॉइंटर को पढ़ना है। ऐसा करने के लिए वर्तमान अच्छा अभ्यास एक कच्चे सूचक का उपयोग करना है जो इस कोड को देखने वाले अन्य डेवलपर्स को "उपयोग लेकिन स्वामित्व" का उपयोग करने का संकेत नहीं देता है (unique_ptr का अर्थ है "यदि मैं मर जाता हूं, तो बिंदु वस्तु भी मर जाती है"):
node* here = nullptr; // it will not own the pointed nodes (don't call delete with this pointer)
here = &first_node(); // assuming first_node() returns a reference to the first node
here = here->next.get(); // to get the next node without owning it: use get() - true in all smart pointers interface
मैं अगले के लिए ज़िम्मेदार नोड्स के लिए प्रतिबद्ध नहीं हूं, मैं सिर्फ यह पता लगाने की कोशिश कर रहा हूं कि कच्चे पॉइंटर्स और स्मार्ट पॉइंटर्स के बीच अनुवाद कैसे करें और यह सबसे प्रत्यक्ष लग रहा था। विकल्पों पर कोई सुझाव? –
ठीक है मुझे लगता है कि shared_ptr का उपयोग करना अधिक महंगा होगा लेकिन इसे संभालना आसान होगा। नोड्स को अलग करना बहुत आसान होगा। ऐसा कहा जा रहा है कि एक अनुकूलित सूची कार्यान्वयन कच्चे पॉइंटर्स और कस्टम नोड आवंटन के साथ करेगा। – Klaim
'std :: swap' के बारे में मत भूलना। –