मेरे पास एक फैक्ट्री विधि है जो वस्तुओं का एक समूह बनाता है और उन्हें पॉइंटर्स देता है। ऑब्जेक्ट्स का स्वामित्व कॉलर को स्थानांतरित करता है:पॉइंटर्स (और स्वामित्व) के वेक्टर को वापस कैसे करें C++ 11
std::vector<animal*> create_zoo();
यह काम करता है, लेकिन स्मृति रिसाव के लिए प्रवण है।
auto zoo = create_zoo();
वेक्टर ढेर पर है और स्वचालित रूप से साफ हो जाता है, निहित ऑब्जेक्ट नहीं है।
विभिन्न उप-प्रकारों के ऑब्जेक्ट लौटा दिए जाते हैं। पॉइंटर्स के बजाय मूल्यों को पुनर्प्राप्त करना नहीं होगा।
मैं
std::vector<std::unique_ptr<animal> > create_zoo();
उपयोग करने के लिए सोच रहा था लेकिन unique_ptr
प्रतिलिपि अर्थ विज्ञान नहीं है और मैं मूल्य है, जो, सिद्धांत रूप में, एक कॉपी बन जाती द्वारा vector
लौट आते हैं।
मैं से बचने के लिए कि
std::unique_ptr<std::vector<std::unique_ptr<animal> > > create_zoo();
लेकिन यह हास्यास्पद हो रही है ढेर पर vector
डाल सकता है।
यह भी काम करना चाहिए:
std::vector<std::shared_ptr<animal> > create_zoo();
यह काम करेगा, लेकिन यह वास्तव में स्वामित्व का हस्तांतरण नहीं है। कॉलर को यह मानना है कि वस्तुओं के लिए अन्य संकेतक हो सकते हैं।
मैं सुझावों के लिए खुला हूं। std::vector
होने की आवश्यकता नहीं है। मैं सिर्फ ऐसे फैक्ट्री को लागू करने का एक अच्छा तरीका ढूंढ रहा हूं जो आधुनिक सी ++ के साथ कई ऑब्जेक्ट्स का स्वामित्व देता है। मैं अब के लिए बढ़ावा से परहेज कर रहा हूँ। मैं नई सी ++ 11 सामान का पता लगाने की कोशिश कर रहा हूं।
आप फिर से विचार कर सकते हैं कि आपको पॉइंटर्स के रूप में आवंटित पशु वस्तुओं की आवश्यकता है या नहीं। 'std :: वेक्टर 'आपके उद्देश्यों के लिए भी काम कर सकता है। पशु वस्तुओं को वेक्टर के साथ आवंटित किया जाएगा और आगे बढ़ने के बाद इसके साथ आगे बढ़ेगा। –