संभावित डुप्लिकेट:
बिना नए बनाम का उपयोग किए किसी वस्तु को तत्काल बनाने में क्या अंतर है
एक वस्तु बनाना: `new` के साथ या उसके बिना
इन दोनों कथनों में क्या अंतर है
HttpUtil httpUtil;
तथा
HttpUtil *net = new HttpUtil();
कौन सा उपयोग किया जाना बेहतर है?
उत्तर:
जवाब के लिए 2 № 1पहला कथन एक चर बनाता है जिसे बुलाया जाता है httpUtil
"स्टैक" पर - इसका मतलब है कि जैसे ही उस लाइन को पूरा करने वाला फ़ंक्शन खत्म होता है, वैरिएबल "स्कोप से बाहर" चला जाता है और रिलीज़ हो जाता है (इसका उपयोग करने वाली मेमोरी अन्य सामान के लिए उपयोग करने के लिए स्वतंत्र हो जाती है)।
दूसरा कथन "हीप" पर एक चर बनाता है - इसका मतलब है कि चर तब तक याद रहेगा जब तक आप कॉल नहीं करते delete
इस पर। ढेर पर चर आवंटित करते समय आपको यह सुनिश्चित करने की आवश्यकता होती है कि आप हमेशा delete
यह कुछ बिंदु पर है, अन्यथा आप "स्मृति लीक प्राप्त करेंगे - यह वह जगह है जहां आप अब अपने को नहीं देख सकते हैं।" *net
चर, लेकिन स्मृति अभी भी आवंटित की गई है।
जवाब के लिए 4 № 2
पहले एक स्वचालित चर बनाता है। मेमोरी प्रबंधन स्वचालित है, आवंटन तेज है क्योंकि यह स्टैक पर है, स्मृति रिसाव का कोई मौका नहीं है।
दूसरा संस्करण एक गतिशील चर बनाता है - आप "मेमोरी की सफाई के लिए जिम्मेदार हैं और आवंटन ढेर पर धीमा है।
हमेशा पहले वाले को पसंद करें। यदि आपको गतिशील आवंटन (जीवनकाल या बहुरूपी व्यवहार के लिए) का उपयोग करना चाहिए, तो कच्चे पॉइंटर्स के बजाय स्मार्ट पॉइंटर्स का उपयोग करें।
उत्तर № 3 के लिए 1
पहले एक सांख्यिकीय रूप से बनाई गई वस्तु है जहां आपडॉन "टी इसके विनाश के बारे में चिंता करने की जरूरत है। बाद में एक गतिशील रूप से बनाई गई वस्तु है जहां आपको आवेदन समाप्त होने से पहले इसके विनाश की देखभाल करने की आवश्यकता है।
पहले एक को प्राथमिकता दी जाती है जहाँ आपको स्मृति प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं है।