dynamic memory allocation - Constructors for C++ objects -


मेरे पास निम्नलिखित के रूप में क्लास व्यक्ति है:

  वर्ग व्यक्ति {char * name; इंट उम्र; };  

अब मुझे दो कंस्ट्रक्टर जोड़ना होगा कोई तर्क नहीं ले रहा है, जो गतिशील रूप से आवंटित संसाधनों के लिए मूल्यों को सम्मिलित करता है। प्रारंभिक सूची द्वारा आरंभ किए जाने वाले दूसरे (चार *, पूर्णांक) तर्क अंतिम भाग वस्तुओं को नष्ट करने और गतिशील रूप से आवंटित संसाधनों को वितरित करने के बारे में जानकारी दिखाने वाले एक नाशक को परिभाषित करना है। यह कार्य कैसे करें?

यही मेरे पास पहले से है:

  वर्ग व्यक्ति {char * name; इंट उम्र; सार्वजनिक: व्यक्ति () {this- & gt; name = new * char; यह- & gt; आयु = नया इंट; } व्यक्ति (चार * c, int i) {}};  

डिफ़ॉल्ट कन्स्ट्रक्टर में, चार सरणी के आवंटन में इसका वांछित आकार, जैसे

<पूर्व> यह- & gt; नाम = नया चार [32];

ध्यान दें कि इस आकार में टर्मिनिंग 0 वर्ण शामिल हैं, इसलिए आप इस सरणी में नामों की प्रभावी लंबाई 31 कर सकते हैं।

पैरामीट्रैज्ड कन्स्ट्रक्टर में, आप बस अपने वर्ग सदस्यों को दिए गए मानदंडों को असाइन करें।

डिस्ट्रक्टर में, आपको गतिशील रूप से आवंटित संसाधनों को निरुपित करना होगा - सुनिश्चित करें कि को हटाएं] [] का उपयोग करना सुनिश्चित करें, और केवल तब, जब deallocating new [] के साथ आवंटित स्मृति:

  ~ व्यक्ति () {std :: cout & lt; & lt; "संसाधनों को नष्ट करना" & lt; & lt; std :: endl; हटाएं [] नाम; उम्र हटाना; }  अद्यतन:  मैंने इसे एक याद किया: यदि आप गतिशील रूप से  age  आवंटित करना चाहते हैं, तो आपको इसे  int के रूप में घोषित करना चाहिए * आयु 

मुझे लगता है कि इस अभ्यास का मतलब गतिशील आवंटन / deallocation अभ्यास करना है; इस संदर्भ में, यह ठीक है। हालांकि, सामान्य रूप से, यह गतिशील रूप से int s को आवंटित करने के लिए और char * के बजाए आपको std :: string , जो स्वचालित रूप से और सुरक्षित रूप से आपके लिए स्मृति आवंटन को संभालता है।


Comments