हाँ एक रिसाव है , आप कैसे LEAK को परिभाषित करते हैं और कितने LATER पर निर्भर करता है ...
यदि रिसाव से आपका मतलब है "स्मृति आवंटित की गई है, उपयोग के लिए अनुपलब्ध है, भले ही आप इसका उपयोग कर रहे हैं" और बाद में आप निपटान का आह्वान करने के बाद कभी भी मतलब रखते हैं, तो फिर हां एक रिसाव हो सकता है, हालांकि इसका स्थायी नहीं है (यानी के लिए आपके एप्लिकेशन रनटाइम का जीवन)।
मेमोरीस्ट्रीम द्वारा उपयोग की जाने वाली प्रबंधित मेमोरी को मुक्त करने के लिए, आपको इसे अप्रतिबंधित करने की आवश्यकता है अपने संदर्भ को शून्य करके, , इसलिए यह तुरंत कचरा संग्रहण के लिए योग्य हो जाता है। यदि आप ऐसा करने में विफल रहते हैं, तो आप उस समय से एक अस्थायी रिसाव पैदा करते हैं, जब तक आप इसका उपयोग नहीं करते हैं, जब तक कि आपका संदर्भ गुंजाइश से बाहर नहीं जाता है, क्योंकि इस दौरान मेमोरी आवंटन के लिए उपलब्ध नहीं होगी।
उपयोग कथन का लाभ (बस कॉलिंग से अधिक निपटान) यह है कि आप अपने कथन का उपयोग करते हुए अपने संदर्भ को अस्वीकार कर सकते हैं। जब उपयोग कथन समाप्त होता है, तो न केवल कॉल किया जाता है, बल्कि आपका संदर्भ कार्यक्षेत्र से बाहर हो जाता है, प्रभावी रूप से संदर्भ को शून्य कर देता है और "संदर्भ = अशक्त" कोड लिखने के लिए आपको याद रखने की आवश्यकता के बिना तुरंत कचरा संग्रह के लिए अपनी वस्तु को योग्य बनाता है।
जबकि कुछ को अप्रतिबंधित करने में विफल रहने के लिए एक क्लासिकल "स्थायी" मेमोरी लीक नहीं है, निश्चित रूप से इसका प्रभाव समान है। उदाहरण के लिए, यदि आप अपना संदर्भ मेमोरीस्ट्रीम में रखते हैं (यहां तक कि निपटान को कॉल करने के बाद भी), और अपनी विधि में थोड़ा और नीचे आप अधिक मेमोरी आवंटित करने का प्रयास करते हैं ... आपके अभी भी संदर्भित मेमोरी स्ट्रीम द्वारा उपयोग की जाने वाली मेमोरी उपलब्ध नहीं होगी। जब तक आप संदर्भ को शून्य कर देते हैं या यह कार्यक्षेत्र से बाहर हो जाता है, भले ही आपने इसे निपटान कहा हो और इसका उपयोग कर रहे हों।