System::SmartPtr क्लास

SmartPtr class

हीप पर आवंटित प्रकारों को लपेटने के लिए पॉइंटर क्लास। इसे उन क्लासों की मेमोरी प्रबंधन के लिए उपयोग करें जो Object को विरासत में लेती हैं। यह पॉइंटर प्रकार इंट्रूज़िव पॉइंटर सेमेंटिक्स का पालन करता है। रेफ़रेंस काउंटर या तो Object स्वयं में या काउंटर संरचना में संग्रहीत होता है जो Object इंस्टेंस से कड़ा जुड़ा होता है। किसी भी स्थिति में, सभी SmartPtr इंस्टेंस एकल स्वामित्व समूह बनाते हैं, चाहे वे कैसे भी बनाए गए हों, जो std::shared_ptr क्लास के व्यवहार से अलग है। रॉ पॉइंटर को SmartPtr में बदलना सुरक्षित है क्योंकि अन्य SmartPtr इंस्टेंस समान ऑब्जेक्ट के साझा रेफ़रेंस रखती हैं। SmartPtr क्लास का इंस्टेंस दो स्थितियों में हो सकता है: साझा पॉइंटर और कमजोर पॉइंटर। ऑब्जेक्ट को जीवित रखने के लिए, साझा रेफ़रेंस की संख्या सकारात्मक होनी चाहिए। दोनों कमजोर और साझा पॉइंटर का उपयोग पॉइंटेड ऑब्जेक्ट तक पहुँचने के लिए किया जा सकता है (मेथड कॉल करने, फ़ील्ड पढ़ने या लिखने आदि के लिए), लेकिन कमजोर पॉइंटर साझा पॉइंटर रेफ़रेंस काउंटिंग में भाग नहीं लेते। Object तब हटाया जाता है जब उसका अंतिम ‘shared’ SmartPtr पॉइंटर नष्ट हो जाता है। इसलिए, सुनिश्चित करें कि यह तब न हो जब अन्य साझा SmartPtr पॉइंटर मौजूद न हों, जैसे कि ऑब्जेक्ट निर्माण या विनाश के दौरान। इस समस्या को ठीक करने के लिए System::Object::ThisProtector सेंट्री ऑब्जेक्ट्स (C++ कोड में) या CppCTORSelfReference या CppSelfReference एट्रिब्यूट (C# कोड में) का उपयोग करें। इसी तरह, लूप रेफ़रेंस को तोड़ने के लिए System::WeakPtr पॉइंटर क्लास या System::SmartPtrMode::Weak पॉइंटर मोड (C++ कोड में) या CppWeakPtr एट्रिब्यूट (C# कोड में) का उपयोग करें। यदि दो या अधिक ऑब्जेक्ट ‘shared’ पॉइंटर से एक-दूसरे को रेफ़रेंस करते हैं, तो वे कभी हटेंगे नहीं। यदि रनटाइम में पॉइंटर प्रकार (weak या shared) बदलना हो, तो System::SmartPtr::set_Mode() मेथड या System::DynamicWeakPtr क्लास का उपयोग करें। SmartPtr क्लास में कोई वर्चुअल मेथड नहीं है। आपको इसे केवल तभी विरासत में लेना चाहिए जब आप अपनी स्वयं की मेमोरी प्रबंधन रणनीति बना रहे हों। यह प्रकार अन्य ऑब्जेक्ट की डिलीशन को प्रबंधित करने के लिए एक पॉइंटर है। इसे स्टैक पर आवंटित किया जाना चाहिए और फ़ंक्शन को वैल्यू या const रेफ़रेंस द्वारा पास किया जाना चाहिए।

template<class T>class SmartPtr
पैरामीटरविवरण
Tपॉइंटेड ऑब्जेक्ट का प्रकार। यह या तो System::Object होना चाहिए या उसका उपवर्ग।

विधियाँ

विधिविवरण
begin()अधीन संग्रह की begin() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें begin() मेथड हो।
begin() constअधीन संग्रह की begin() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें begin() मेथड हो।
Cast() constपॉइंटर को उसके स्वयं के प्रकार में कास्ट करता है।
Cast() conststatic_cast का उपयोग करके पॉइंटर को बेस प्रकार में कास्ट करता है।
Cast() constdynamic_cast का उपयोग करके पॉइंटर को डेराइव्ड प्रकार में कास्ट करता है।
Cast() constdynamic_cast का उपयोग करके पॉइंटर को डेराइव्ड प्रकार में कास्ट करता है।
cbegin() constअधीन संग्रह की cbegin() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें cbegin() मेथड हो।
cend() constअधीन संग्रह की cend() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें cend() मेथड हो।
const_pointer_cast() constपॉइंटेड ऑब्जेक्ट पर const_cast का उपयोग करके पॉइंटर को विभिन्न प्रकार में कास्ट करता है।
dynamic_pointer_cast() constपॉइंटेड ऑब्जेक्ट पर dynamic_cast का उपयोग करके पॉइंटर को विभिन्न प्रकार में कास्ट करता है।
end()अधीन संग्रह की end() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें end() मेथड हो।
end() constअधीन संग्रह की end() मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब SmartPtr_ वह विशेषीकरण प्रकार हो जिसमें end() मेथड हो।
get() constपॉइंटेड ऑब्जेक्ट प्राप्त करता है।
get_Mode() constपॉइंटर मोड प्राप्त करता है।
get_shared() constसंकेतित वस्तु प्राप्त करता है, लेकिन यह सुनिश्चित करता है कि पॉइंटर साझा मोड में है।
get_shared_count() constसंदर्भित वस्तु के लिए मौजूद साझा पॉइंटर्स की संख्या प्राप्त करता है, जिसमें वर्तमान भी शामिल है। यह सुनिश्चित करता है कि वर्तमान पॉइंटर साझा मोड में है।
GetHashCode() constसंकेतित वस्तु पर GetHashCode() को कॉल करता है।
GetObjectNotNull() constवर्तमान में संदर्भित वस्तु प्राप्त करता है (यदि मौजूद हो) या अपवाद फेंकता है।
GetObjectOrNull() constसंकेतित वस्तु प्राप्त करता है (यदि मौजूद हो) या nullptr। यह get() के समान है।
GetObjectOwner() constसंदर्भित वस्तु प्राप्त करता है।
GetPointer() constसंकेतित वस्तु प्राप्त करता है (यदि मौजूद हो) या nullptr। यह get() के समान है।
Is(const System::TypeInfo&) constजाँचता है कि संकेतित वस्तु विशिष्ट प्रकार की है या उसकी चाइल्ड प्रकार की। C# के ‘is’ सेमान्टिक का पालन करता है।
IsAliasingPtr() constजाँचता है कि पॉइंटर किसी अन्य वस्तु की ओर संकेत कर रहा है न कि स्वामित्व वाली (एक aliasing कंस्ट्रक्टर द्वारा बनाई गई)।
IsShared() constजाँचता है कि पॉइंटर साझा मोड में है।
IsWeak() constजाँचता है कि पॉइंटर कमजोर मोड में है।
explicit operator bool() constजाँचता है कि पॉइंटर null नहीं है।
operator!() constजाँचता है कि पॉइंटर null है।
operator*() constसंकेतित वस्तु का रेफ़रेंस प्राप्त करता है। यह सुनिश्चित करता है कि पॉइंटर null नहीं है।
operator->() constसंदर्भित वस्तु के सदस्यों तक पहुँचने की अनुमति देता है।
operator<(Y *) constSmartPtr क्लास के लिए कम-तुलना सेमान्टिक प्रदान करता है।
operator<(SmartPtr<Y> const&) constSmartPtr क्लास के लिए कम-तुलना सेमान्टिक प्रदान करता है।
operator=(SmartPtr_&&)SmartPtr ऑब्जेक्ट को मूव-असाइन करता है। x अब उपयोग योग्य नहीं रहता।
operator=(const SmartPtr_&)SmartPtr ऑब्जेक्ट को कॉपी-असाइन करता है।
operator=(const SmartPtr<Q>&)SmartPtr ऑब्जेक्ट को कॉपी-असाइन करता है। आवश्यक प्रकार रूपांतरण करता है।
operator=(Pointee_ *)कच्चे पॉइंटर को SmartPtr ऑब्जेक्ट को असाइन करता है।
operator=(std::nullptr_t)पॉइंटर का मान nullptr सेट करता है।
operator==(std::nullptr_t) constजाँचता है कि पॉइंटर nullptr की ओर संकेत करता है।
operator[](IdxType) constऐरे तत्वों के लिए एक्सेसर। केवल तब संकलित होता है जब SmartPtr_ System::Array का विशेषीकरण हो।
RemoveAliasing() constपॉइंटर से aliasing (aliasing कंस्ट्रक्टर द्वारा बनाई गई) को हटाता है, यह सुनिश्चित करता है कि वह उसी वस्तु को प्रबंधित (यदि साझा) या ट्रैक (यदि कमजोर) करता है जिस पर वह संकेत करता है।
reset(Pointee_ *)संकेतित वस्तु सेट करता है।
reset()पॉइंटर को nullptr की ओर संकेत करने के लिए बनाता है।
set_Mode(SmartPtrMode)पॉइंटर मोड सेट करता है। संदर्भित ऑब्जेक्ट की रेफ़रेंस काउंट को बदल सकता है।
SetContainedTemplateWeakPtr(uint32_t) constपॉइंट किए गए ऑब्जेक्ट (यदि कोई हो) पर SetTemplateWeakPtr() मेथड को कॉल करता है।
SmartPtr(SmartPtrMode)आवश्यक मोड का SmartPtr ऑब्जेक्ट बनाता है।
SmartPtr(std::nullptr_t, SmartPtrMode)आवश्यक मोड का null-pointer SmartPtr ऑब्जेक्ट बनाता है।
SmartPtr(Pointee_ *, SmartPtrMode)निर्दिष्ट ऑब्जेक्ट की ओर इशारा करने वाला SmartPtr बनाता है, या रॉ पॉइंटर को SmartPtr में बदलता है।
SmartPtr(const SmartPtr_&, SmartPtrMode)SmartPtr ऑब्जेक्ट को कॉपी कंस्ट्रक्ट करता है। दोनों पॉइंटर बाद में एक ही ऑब्जेक्ट की ओर इशारा करते हैं।
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)SmartPtr ऑब्जेक्ट को कॉपी कंस्ट्रक्ट करता है। दोनों पॉइंटर बाद में एक ही ऑब्जेक्ट की ओर इशारा करते हैं। यदि अनुमति हो तो टाइप कन्वर्ज़न करता है।
SmartPtr(SmartPtr_&&, SmartPtrMode)SmartPtr ऑब्जेक्ट को मूव कंस्ट्रक्ट करता है। प्रभावी रूप से, यदि दोनों एक ही मोड के हैं तो दो पॉइंटरों को स्वैप करता है। कॉल के बाद x उपयोग योग्य नहीं रह सकता।
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)संदर्भित एरे के प्रकार को अलग प्रकार के नए एरे बनाकर बदलता है। यह उपयोगी है जब C# में ऐसा एरे टाइप कास्ट हो जो C++ में समर्थित नहीं है।
explicit SmartPtr(const Y&)खाली एरे को इनिशियलाइज़ करता है। कुछ C# कोड संरचनाओं को अनुवादित करने के लिए उपयोग किया जाता है।
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)एक SmartPtr बनाता है जो ptr के प्रारंभिक मान के साथ स्वामित्व जानकारी साझा करता है, लेकिन एक असंबंधित और अनमैनेज्ड पॉइंटर p को रखता है।
static_pointer_cast() constपॉइंट किए गए ऑब्जेक्ट पर static_cast का उपयोग करके पॉइंटर को अलग प्रकार में कास्ट करता है।
ToObjectPtr() constकिसी भी पॉइंटर प्रकार को Object के पॉइंटर में बदलता है। इसे Pointee_ प्रकार के पूर्ण होने की आवश्यकता नहीं होती।
static Type()Pointee_ प्रकार के लिए System::TypeInfo ऑब्जेक्ट प्राप्त करने का शॉर्टकट।
~SmartPtr()SmartPtr ऑब्जेक्ट को नष्ट करता है। यदि आवश्यक हो, तो पॉइंट किए गए ऑब्जेक्ट की रेफ़रेंस काउंटर को घटाता है और ऑब्जेक्ट को डिलीट करता है।

Typedefs

टाइपडिफ़विवरण
ArrayTypeयदि यह System::Array का स्पेशलाइज़ेशन है तो Pointee_ के समान है, अन्यथा void।
Pointee_संदर्भित प्रकार।
SmartPtr_स्पेशलाइज़्ड स्मार्ट पॉइंटर प्रकार।
ValueTypeपॉइंट किए गए एरे का स्टोरेज टाइप। केवल तभी अर्थपूर्ण है जब T, System::Array का स्पेशलाइज़ेशन हो।

संबंधित देखें