/ / ऑब्जेक्ट कंस्ट्रक्शन सिंटैक्स [डुप्लिकेट] - c ++, oop

ऑब्जेक्ट कंस्ट्रक्शन सिंटेक्स [डुप्लिकेट] - सी ++, ओओपी

संभावित डुप्लिकेट:
बिना नए बनाम का उपयोग किए किसी वस्तु को तत्काल बनाने में क्या अंतर है
एक वस्तु बनाना: `new` के साथ या उसके बिना

इन दोनों कथनों में क्या अंतर है

 HttpUtil httpUtil;

तथा

 HttpUtil *net = new HttpUtil();

कौन सा उपयोग किया जाना बेहतर है?

उत्तर:

जवाब के लिए 2 № 1

पहला कथन एक चर बनाता है जिसे बुलाया जाता है httpUtil "स्टैक" पर - इसका मतलब है कि जैसे ही उस लाइन को पूरा करने वाला फ़ंक्शन खत्म होता है, वैरिएबल "स्कोप से बाहर" चला जाता है और रिलीज़ हो जाता है (इसका उपयोग करने वाली मेमोरी अन्य सामान के लिए उपयोग करने के लिए स्वतंत्र हो जाती है)।

दूसरा कथन "हीप" पर एक चर बनाता है - इसका मतलब है कि चर तब तक याद रहेगा जब तक आप कॉल नहीं करते delete इस पर। ढेर पर चर आवंटित करते समय आपको यह सुनिश्चित करने की आवश्यकता होती है कि आप हमेशा delete यह कुछ बिंदु पर है, अन्यथा आप "स्मृति लीक प्राप्त करेंगे - यह वह जगह है जहां आप अब अपने को नहीं देख सकते हैं।" *net चर, लेकिन स्मृति अभी भी आवंटित की गई है।


जवाब के लिए 4 № 2

पहले एक स्वचालित चर बनाता है। मेमोरी प्रबंधन स्वचालित है, आवंटन तेज है क्योंकि यह स्टैक पर है, स्मृति रिसाव का कोई मौका नहीं है।

दूसरा संस्करण एक गतिशील चर बनाता है - आप "मेमोरी की सफाई के लिए जिम्मेदार हैं और आवंटन ढेर पर धीमा है।

हमेशा पहले वाले को पसंद करें। यदि आपको गतिशील आवंटन (जीवनकाल या बहुरूपी व्यवहार के लिए) का उपयोग करना चाहिए, तो कच्चे पॉइंटर्स के बजाय स्मार्ट पॉइंटर्स का उपयोग करें।


उत्तर № 3 के लिए 1

पहले एक सांख्यिकीय रूप से बनाई गई वस्तु है जहां आपडॉन "टी इसके विनाश के बारे में चिंता करने की जरूरत है। बाद में एक गतिशील रूप से बनाई गई वस्तु है जहां आपको आवेदन समाप्त होने से पहले इसके विनाश की देखभाल करने की आवश्यकता है।

पहले एक को प्राथमिकता दी जाती है जहाँ आपको स्मृति प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं है।