c++ - Templated Stl Containers -
टेम्पलेट & lt; class T & gt; वर्ग कंटेनर {टाइप किए गए एफिल & lt; T & gt; ObjectList; सार्वजनिक: ~ कंटेनर () (for typename ObjectList :: iterator item = _Container.begin (); item! = _Container.end (); आइटम ++) {if (* item) delete (* item)}}}
मैं सूचक सामग्री को हटा कर कंटेनर आइटम को कैसे मुक्त कर सकता हूं? जी ++ इस कोड की अनुमति नहीं है
आप ऐसा नहीं करना चाहते - कंटेनर (वस्तु के मामले में, आपके मामले में) मालिक इसमें शामिल आइटम, इसलिए उन्हें हटाने के लिए, आपको इसे आपको क्या कहना है, यह बताए जाने की आवश्यकता है: ObjectList.erase (आइटम);
। चूंकि आप सभी वस्तुओं को हटाना (जाहिरा तौर पर) कर रहे हैं, तो आप इसका इस्तेमाल कर सकते हैं: ObjectList.clear ();
और अपनी स्पष्ट लूप का उपयोग करके छोड़ दें।
फिर, क्योंकि ऑब्जेक्टलिस्ट जाहिरा तौर पर एक std :: सूची है, आपको ऊपर से कोई भी करने की ज़रूरत नहीं है - जब आप std :: सूची को नष्ट कर देते हैं, तो यह स्वतः जो कुछ भी वस्तु शामिल है उसे नष्ट कर देता है।
संपादित करें: ( ज्यादातर चाचा बन्स की टिप्पणी के जवाब में): यदि आप उस पॉइंटर्स के एक कंटेनर बनाने की कोशिश कर रहे हैं जो उस पॉइंटर्स द्वारा इंगित किए गए आइटम को हटाते हुए प्रबंधित करते हैं, तो सबसे पहले जो आप करना चाहते हैं, वह यह सुनिश्चित करता है कि इसमें वास्तव में संकेत दिए गए हैं: < / P>
टेम्पलेट & lt; वर्ग T & gt; वर्ग कंटेनर {typedef typename std :: सूची & lt; T & gt; :: iterator; Std :: सूची & lt; T * & gt; आइटम; // नोट 'टी *' के बजाय सिर्फ "टी" सार्वजनिक: ~ कंटेनर () {for (यह p = items.begin; it! = Items.end (); ++ यह) इसे हटाएं; // * यह कंटेनर से एक संकेतक उत्पन्न करता है }};
Comments
Post a Comment