मेरे पास पॉलिमॉर्फिक ऑब्जेक्ट्स का संग्रह है, जो सभी मेरे एनिमल क्लास: बिल्ली, कुत्ते और बंदरफिश से व्युत्पन्न हैं।मुझे पॉइंटर्स के वेक्टर की बजाय ऑब्जेक्ट्स के वेक्टर का उपयोग कब करना चाहिए?
मेरे आपरेशन के सामान्य मोड इसलिए की तरह, पशु संकेत का एक वेक्टर में इन वस्तुओं की दुकान के लिए है:
std :: वेक्टर < पशु *> my_vector;
my_vector.push_back(new Animal_Cat()); my_vector.push_back(new Animal_Dog()); my_vector.push_back(new Animal_MonkeyFish());
और जीवन बहुत अच्छा है ... या है ना?
मुझे हाल ही में बताया गया है कि मुझे वास्तव में इस फैशन में स्मृति आवंटित करने से बचने की कोशिश करनी चाहिए, क्योंकि यह स्मृति प्रबंधन को एक गड़बड़ी बनाता है। जब मुझे my_vector को नष्ट करने की आवश्यकता होती है, तो मुझे सभी तत्वों के माध्यम से पुन: प्रयास करना पड़ता है और सबकुछ हटा देता है।
मुझे नहीं लगता कि मैं संदर्भों का एक वेक्टर स्टोर कर सकता हूं (मैं इसके बारे में गलत हो सकता हूं), ऐसा लगता है कि पशु वस्तुओं के वेक्टर को स्टोर करना मेरा एकमात्र विकल्प है।
मुझे ऑब्जेक्ट्स के वेक्टर बनाम पॉइंटर्स के वेक्टर का उपयोग कब करना चाहिए? सामान्य रूप से, कौन सी विधि बेहतर है? (मैं ऑब्जेक्ट प्रतिलिपि जितना संभव हो उतना प्रतिलिपि बनाना चाहता हूं।)
बूस्ट स्मार्ट पॉइंटर्स ने इसे तकनीकी रिपोर्ट में बनाया है, इसलिए आपके पास std :: tr1 :: shared_ptr <> हो सकता है। वीएस 2008 में वीसी ++ 9 करता है। –
संदर्भ के लिए C++ 0x unique_pte, जो auto_ptr के लिए बहुत अधिक प्रतिस्थापन है, रैल्यू संदर्भों के कारण कंटेनरों में काम करेगा और अर्थशास्त्र को स्थानांतरित करेगा –