स्मार्ट पॉइंटर्स ने नियमित पॉइंटर्स पर अतिरिक्त फायदे जोड़े हैं। यहां आपको रस्ट में स्मार्ट पॉइंटर्स के बारे में जानने की जरूरत है।
मेमोरी प्रबंधन रस्ट के विक्रय बिंदुओं में से एक है, खासकर जब से सुरक्षा से समझौता नहीं किया जाता है। रस्ट की स्वामित्व प्रणाली कंपाइलर को कोड सुरक्षा की गारंटी देती है और स्मृति त्रुटियों जैसे लटकने वाले पॉइंटर्स और मेमोरी लीक से मुक्ति की गारंटी देती है।
जंग अतिरिक्त मेटाडेटा और पारंपरिक पॉइंटर्स से परे क्षमताओं के साथ स्मार्ट पॉइंटर्स भी प्रदान करता है। मेमोरी लीक से निपटने के लिए स्मार्ट पॉइंटर्स उपयोगी होते हैं।
जंग में स्मार्ट पॉइंटर्स क्या हैं?
स्मार्ट पॉइंटर्स में से एक हैं जंग के डेटा प्रकार जो अतिभारित ऑपरेटरों, विध्वंसक और स्वचालित मेमोरी प्रबंधन जैसी अतिरिक्त कार्यात्मकताओं की पेशकश करके नियमित पॉइंटर्स की क्षमताओं का विस्तार करता है।
रस्ट स्मार्ट पॉइंटर्स को निष्पादित करने के लिए स्ट्रक्चर्स का उपयोग करता है; इस प्रकार, स्मार्ट पॉइंटर्स में स्वामित्व क्षमताएं भी होती हैं।
जब आप गतिशील रूप से आवंटित डेटा वाली मेमोरी को स्मार्ट पॉइंटर्स से लिंक करते हैं, तो वे स्वचालित रूप से हटा दिए जाते हैं। स्मार्ट पॉइंटर्स नियंत्रित करने के लिए कार्यक्षमता प्रदान करते हैं
जंग की वस्तु जीवनकाल, उन्हें अशक्त सूचक डीरेफ़रेंसिंग और मेमोरी लीक जैसी त्रुटियों को रोकने के लिए आसान बनाता है जो C और C ++ जैसी अन्य निम्न-स्तरीय भाषाओं में लोकप्रिय हैं।स्मार्ट पॉइंटर्स का उपयोग करने के लाभ
यहाँ स्मार्ट पॉइंटर्स का उपयोग करने के कुछ लाभ दिए गए हैं:
- स्वचालित मेमोरी प्रबंधन: स्मार्ट पॉइंटर्स नियमित पॉइंटर्स के साथ मैन्युअल मेमोरी प्रबंधन के विपरीत आवंटन और डीलोकेशन सहित स्वचालित मेमोरी प्रबंधन प्रदान करते हैं।
- बेहतर सुरक्षा: स्मार्ट पॉइंटर्स स्वामित्व सिमेंटिक्स को लागू करते हैं, यह सुनिश्चित करते हुए कि केवल एक मालिक प्रति समय संसाधनों तक पहुंच सकता है, डेटा ट्रेस और समवर्ती-संबंधी बग को रोकता है।
- FLEXIBILITY: जंग कई स्मार्ट पॉइंटर्स प्रदान करता है, प्रत्येक अपने सेट के साथ स्वामित्व शब्दार्थ सुरक्षित कोड को लचीले ढंग से लिखने के लिए।
- संसाधन प्रबंधन: आप संसाधनों को इनकैप्सुलेट करके फ़ाइल हैंडलर और नेटवर्क सॉकेट जैसे अन्य संसाधनों को प्रबंधित करने के लिए स्मार्ट पॉइंटर्स का उपयोग कर सकते हैं एक स्मार्ट पॉइंटर के भीतर जो उनके जीवनचक्र को प्रबंधित करना आसान बनाता है और यह सुनिश्चित करता है कि वे ठीक से बंद हैं और बाद में जारी किए गए हैं उपयोग।
- बेहतर प्रदर्शन: स्मार्ट पॉइंटर्स मेमोरी कॉपी और आवंटन को कम करके प्रदर्शन को बेहतर बनाने में मदद करते हैं - स्मार्ट पॉइंटर्स का उपयोग करने से मेमोरी फ़ुटप्रिंट कम होने से प्रदर्शन में वृद्धि होती है।
स्मार्ट पॉइंटर्स मध्यम से बड़े आकार के अनुप्रयोगों के लिए उपयुक्त होते हैं, खासकर उन मामलों में जहां स्मृति प्रबंधन महत्वपूर्ण होता है।
स्मार्ट पॉइंटर्स के प्रकार
जंग सहित कई प्रकार के स्मार्ट पॉइंटर्स प्रदान करता है डिब्बा, आर सी, रेफसेल, और म्युटेक्स.
1. बॉक्स स्मार्ट पॉइंटर
डिब्बा स्मार्ट पॉइंटर रस्ट का सबसे सरल और सबसे आम स्मार्ट पॉइंटर है। डिब्बा स्मार्ट पॉइंटर ढेर पर मूल्यों को आवंटित करने में मदद करता है और अभिगम्यता के लिए बॉक्सिंग पॉइंटर बनाता है।
डिब्बा स्मार्ट पॉइंटर डायनेमिक मेमोरी एलोकेशन के लिए आसान होता है जब आपको यह सुनिश्चित करने की आवश्यकता होती है कि पॉइंटर्स के दायरे से बाहर होने पर मेमोरी अपने आप डिलीट हो जाती है।
यहां बताया गया है कि आप ए की घोषणा और उपयोग कैसे कर सकते हैं डिब्बा संकेतक:
fnमुख्य(){
// बॉक्स स्मार्ट पॉइंटर का नया उदाहरण
होने देना एक्स = डिब्बा::नया(5);
प्रिंटल!(एक्स)
}
डिब्बा प्रकार रस्ट की प्रस्तावना का हिस्सा है, इसलिए आपको अन्य स्मार्ट पॉइंटर्स के विपरीत, प्रकार को आयात नहीं करना पड़ेगा।
एक्स चर एक है डिब्बा सूचक 5 पूर्णांक मान की ओर इशारा करता है। जंग ढेर पर मान के लिए मेमोरी आवंटित करता है और चर के दायरे से बाहर होने पर स्वचालित रूप से हटा देता है।
2. आरसी स्मार्ट सूचक
आर सी (संदर्भ गणना) स्मार्ट सूचक साझा स्वामित्व के मूल्यों को बनाने के लिए कार्यक्षमता प्रदान करता है। आर सी स्मार्ट पॉइंटर्स किसी मान के संदर्भों की संख्या को ट्रैक करते हैं और अंतिम संदर्भ के दायरे से बाहर होने पर मान को हटा देते हैं।
आर सी स्मार्ट पॉइंटर आसान होता है जब आपको अपने प्रोग्राम के कई हिस्सों में पहुंच के लिए मूल्य के स्वामित्व को साझा करने की आवश्यकता होती है।
ए घोषित करना आर सी स्मार्ट सूचक, आप आयात करेंगे आर सी मानक पुस्तकालय से संरचना, एक नया घोषित करें आर सी सूचक के साथ नया फ़ंक्शन, और पॉइंटर वैरिएबल को क्लोन करें क्लोन चर।
उपयोग एसटीडी:: आरसी:: आरसी;
fnमुख्य() {
// RC स्मार्ट पॉइंटर का नया उदाहरण
होने देना एक्स = आरसी:: नया (5);
होने देना वाई = आरसी:: क्लोन (& एक्स);
प्रिंटल!("एक्स = {}, वाई = {}", एक्स, वाई);
}
एक्स चर है आर सी सूचक चर, और वाई वेरिएबल मेमोरी में मान तक पहुंच वाला एक क्लोन है। संदर्भ संख्या दो है, और चर के दायरे से बाहर होने पर मान स्मृति से हटा दिया जाता है।
3. रेफसेल स्मार्ट पॉइंटर
रेफसेल स्मार्ट पॉइंटर आंतरिक परिवर्तनशीलता प्रदान करता है जो अपरिवर्तनीय और परिवर्तनशील संदर्भों को सह-अस्तित्व की अनुमति देता है जब तक कि दिए गए समय में एक परिवर्तनशील संदर्भ हो।
रेफसेल उत्परिवर्तित संदर्भों के स्वामित्व वाले मूल्यों को बदलते समय स्मार्ट पॉइंटर आसान होता है।
Refcell फ़ंक्शन रस्ट के प्रस्तावना का हिस्सा नहीं है, इसलिए आपको स्मार्ट पॉइंटर का उपयोग करने के लिए मानक लाइब्रेरी से संरचना आयात करने की आवश्यकता होगी।
उपयोग एसटीडी:: सेल:: RefCell;
fnमुख्य(){
// Refcell स्मार्ट पॉइंटर का नया उदाहरण
होने देना एक्स = रेफसेल:: नया (5);होने देना वाई = एक्स उधार ();
होने देना z = x.borrow_mut ();प्रिंटल!("वाई = {}", *य);
प्रिंटल!("जेड = {}", *जेड);
}
Refcell स्मार्ट पॉइंटर में मान होता है, और वाई चर मूल्य का अपरिवर्तनीय संदर्भ है। उधार_मट फ़ंक्शन मान का एक परस्पर संदर्भ बनाता है।
यदि एक समय में केवल एक परिवर्तनशील संदर्भ है तो कार्यक्रम सुरक्षित है।
4. म्यूटेक्स स्मार्ट पॉइंटर
म्युटेक्स स्मार्ट सूचक पारस्परिक बहिष्करण प्रदान करता है। म्युटेक्स समवर्ती कार्यक्रमों में कई थ्रेड्स में मूल्यों तक पहुंच को सिंक्रनाइज़ करने के लिए स्मार्ट पॉइंटर आसान है।
म्युटेक्स स्मार्ट पॉइंटर यह सुनिश्चित करने के लिए पारस्परिक बहिष्करण प्रदान करता है कि डेटा ट्रेस को रोकने के दौरान केवल एक थ्रेड मूल्य तक पहुंच सकता है।
आपको आयात करना होगा म्युटेक्स संरचना और के साथ एक नया उदाहरण बनाएँ नया उपयोग करने के लिए समारोह म्युटेक्स जंग में स्मार्ट सूचक।
उपयोग एसटीडी:: सिंक:: म्यूटेक्स;
fnमुख्य() {
// म्यूटेक्स पॉइंटर का नया उदाहरण
होने देना काउंटर = म्यूटेक्स:: नया (0);{
होने देनामुठ संख्या = काउंटर.लॉक ()। खोलना ();
*संख्या += 1;
}
प्रिंटल!("परिणाम: {}", *काउंटर.लॉक ()। खोलना ());
}
विरोध करना परिवर्तनशील नया है म्युटेक्स उदाहरण। मुख्य फ़ंक्शन म्यूटेक्स पर लॉक प्राप्त करता है ताला की विधि म्युटेक्स उदाहरण। लॉक जारी करने और मूल्य प्रिंट करने से पहले लॉक काउंटर के मूल्य के सुरक्षित संशोधन को सक्षम बनाता है।
म्युटेक्स प्रकार गारंटी देता है कि केवल एक थ्रेड साझा संसाधनों तक पहुंच सकता है (इस मामले में, विरोध करना चर) और एक समय में इसके मान को संशोधित करें। पारस्परिक बहिष्करण सुनिश्चित करता है कि डेटा ट्रेस और अन्य समवर्ती मुद्दों को रोकने के लिए साझा संसाधनों तक समवर्ती पहुंच को क्रमबद्ध किया गया है।
रस्ट का स्वामित्व मॉडल स्मृति सुरक्षा की गारंटी देता है
मेमोरी सुरक्षा और लचीलेपन के लिए रस्ट के दृष्टिकोणों में से एक स्मार्ट पॉइंटर्स हैं। रस्ट का स्वामित्व मॉडल यह सुनिश्चित करता है कि प्रोग्राम संकलन समय पर उधार लेने वाले चेकर के साथ मेमोरी का सुरक्षित रूप से उपयोग करें।
उधार चेकर रस्ट के स्वामित्व मॉडल की एक महत्वपूर्ण विशेषता है जो मेमोरी एक्सेसिबिलिटी और संशोधन के लिए सख्त नियम लागू करता है।