जब भी मैं एक वेक्टर मुझे लगता है कि निम्नलिखित तरीके से कर रहा हूँ में गतिशील रूप से आवंटित वस्तु जोड़ने की जरूरत:क्या यह वेक्टर के लिए push_back 'गतिशील आवंटित ऑब्जेक्ट' को सुरक्षित है?
class Foo { ... };
vector<Foo*> v;
v.push_back(new Foo);
// do stuff with Foo in v
// delete all Foo in v
यह सिर्फ काम किया है और कई अन्य लोगों के एक ही बात करने के लिए लग रहे हैं।
आज, मैंने वेक्टर :: push_back को अपवाद फेंक दिया है। इसका मतलब है कि ऊपर दिया गया कोड अपवाद सुरक्षित नहीं है। :-(तो मैं एक समाधान के साथ आया था:
class Foo { ... };
vector<Foo*> v;
auto_ptr<Foo> p(new Foo);
v.push_back(p.get());
p.release();
// do stuff with Foo in v
// delete all Foo in v
लेकिन समस्या यह है कि नया तरीका, वर्बोज़ कठिन है, और मैं देख रहा हूँ कोई भी यह कर रहा है है (कम से कम मेरे चारों ओर नहीं ...)
।मैं नए तरीके के साथ जाना चाहिए?
या, मैं सिर्फ पुराने तरीके के साथ छड़ी कर सकते हैं?
या, यह ऐसा करने का एक बेहतर तरीका है?
कृपया यह भी देखें: [क्यों यह गलत एसटीएल कंटेनर के साथ std :: auto_ptr <> उपयोग करने के लिए है?] [1] [1]: http://stackoverflow.com/questions/111478/why-is -यह-गलत के लिए उपयोग-stdauto-ptr-साथ-STL-कंटेनर –
@Martin: वास्तव में, '' auto_ptr' के उपयोग और यहाँ vector' (मेरा मतलब है, उनकी बातचीत के लिए विशिष्ट) के साथ कोई समस्या नहीं है के बाद से यह 'वेक्टर>' नहीं है जिसके बारे में हम बात कर रहे हैं। –
@Matthieu: आप सही हैं। तो फिर मैं बचा * कह * वहाँ एक मुद्दा है, हालांकि मेरी कड़ी शायद :-) –