int* alloc()
{
int* tmp = new int;
return tmp;
}
int main()
{
int* ptr = alloc();
......
......
delete ptr;
return 0;
}
यहाँ मैं tmp मुक्त नहीं है, लेकिन स्पष्ट रूप से ptr मुक्त हो जाता है। क्या पीपीआर और टीएमपी उसी स्थान को संदर्भित करने के बाद भी मुक्त हो जाएगा?क्या यह सी ++ में मेमोरी रिसाव का कारण बनता है?
यदि नहीं तो पॉइंटर टीएमपी के साथ क्या होता है? क्या यह स्मृति रिसाव का कारण बनता है?
यह रिसाव का कारण नहीं बनता है। पॉइंटर 'tmp' स्वयं एक स्टैक वैरिएबल है, इसलिए यह' alloc() 'रिटर्न के बाद किसी भी मेमोरी का उपयोग नहीं करता है। –
जब यह नए ऑपरेटर का उपयोग करता है तो tmp एक स्टैक चर कैसे है? – kishore
@ किशोर: 'पीआरटी 'सिर्फ एक पता रखता है। वह पता ढेर पर संग्रहीत है। यह _points to_ (संसाधन) कहीं और है, और यही वह है जिसे आपको मुक्त करने की आवश्यकता है (संसाधन, पॉइंटर नहीं)। 'prt हटाएं;' वास्तव में _anything_ को 'ptr'' में नहीं करता है। केवल यह क्या इंगित करता है। – Mat