कंस्ट्रक्टर्स और Malloc
नए और डिलीट एक्सप्रेशन के विपरीत, std::malloc किसी ऑब्जेक्ट के लिए मेमोरी आवंटित करने पर कंस्ट्रक्टर को इनवॉइस नहीं करता है। इसलिए, किसी ऑब्जेक्ट को बनाने के साथ-साथ उसके कंस्ट्रक्टर को कॉल करने के लिए, एक वैकल्पिक दृष्टिकोण की आवश्यकता होती है।
संभावित समाधान:
1. नए का उपयोग:
यह प्राथमिक इच्छित उपयोग है, क्योंकि नया स्पष्ट रूप से एक ऑब्जेक्ट बनाता है और बाद में उसके कंस्ट्रक्टर को आमंत्रित करता है।
उदाहरण:
A* a = new A();
delete a;
2. स्पष्ट कंस्ट्रक्टर इनवोकेशन (प्लेसमेंट नया):
इस विधि में मॉलोक का उपयोग करके मेमोरी आवंटित करना और फिर प्लेसमेंट नए सिंटैक्स का उपयोग करके कंस्ट्रक्टर को मैन्युअल रूप से इनवोकेशन करना शामिल है।
उदाहरण:
A* a = (A*)malloc(sizeof(A));
new (a) A();
a->~A();
free(a);
यह ध्यान रखना महत्वपूर्ण है कि नए प्लेसमेंट के लिए सही कंस्ट्रक्टर ओवरलोड के उपयोग की आवश्यकता होती है और इसे संयम से उपयोग किया जाना चाहिए। आम तौर पर, ऑब्जेक्ट निर्माण के लिए नए को नियोजित किया जाना चाहिए, जबकि प्लेसमेंट नया विशिष्ट परिदृश्यों के लिए उपयुक्त है जहां मेमोरी प्रबंधन को मैन्युअल रूप से नियंत्रित किया जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3