जहां भी संभव हो गतिशील रूप से वस्तुओं को बनाने से बचें। जावा और अन्य समान भाषाओं से आ रही प्रोग्रामर्स अक्सर लिखने सामान की तरह:
string * s = new string("hello world");
जब वे लिखा जाना चाहिए था:
string s = "hello world";
इसी तरह, वे संकेत का संग्रह बना जब वे मूल्यों के संग्रह बनाने चाहिए। उदाहरण के लिए, अगर आप इस तरह एक वर्ग है, तो:
class Person {
public:
Person(const string & name) : mName(name) {}
...
private:
string mName;
};
बल्कि तरह कोड लिखने की तुलना:
vector <Person *> vp;
या यहाँ तक कि:
vector <shared_ptr <Person> > vp;
बजाय का उपयोग मान:
vector <Person> vp;
आप आसानी से ऐसे एवी में जोड़ सकते हैं ईक्टर:
vp.push_back(Person("neil butterworth"));
और व्यक्ति और वेक्टर दोनों के लिए सभी मेमोरी आपके लिए प्रबंधित की जाती है।बेशक, यदि आपको पॉलिमॉर्फिक प्रकारों के संग्रह की आवश्यकता है, तो आपको (स्मार्ट) पॉइंटर्स का उपयोग करना चाहिए
स्रोत
2009-08-20 12:12:24
नई == विचार को नष्ट के साथ सावधान। मान लीजिए कि आपके पास कई जगहें हैं जहां स्मृति जारी की जा सकती है, प्रत्येक को शून्य के लिए चेक के साथ i'e.' अगर (पी) पी हटाएं; 'आप नए == एन * हटा सकते हैं जहां एन मनमानी है। – ezpz
'हटाएं 0' एक नो-ऑप है, इसलिए आपको यह जांचना नहीं चाहिए कि आपका पॉइंटर इसे हटाने से पहले शून्य है या नहीं। –
धन्यवाद पीटर! यह मेरा नंबर 1 पालतू शिखर है! "अगर (पी) पी हटा दें;" इस रूप में फिर से लिखा जाना चाहिए: "पी हटाएं; पी = 0;" या कुछ समान है। – Thomi