## SmartPtr class


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

```cpp
template<class T>class SmartPtr
```


| पैरामीटर | विवरण |
| --- | --- |
| T | पॉइंटेड ऑब्जेक्ट का प्रकार। यह या तो [System::Object](../object/) होना चाहिए या उसका उपवर्ग। |
## विधियाँ

| विधि | विवरण |
| --- | --- |
| [begin](./begin/)() | अधीन संग्रह की [begin()](./begin/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [begin()](./begin/) मेथड हो। |
| [begin](./begin/)() const | अधीन संग्रह की [begin()](./begin/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [begin()](./begin/) मेथड हो। |
| [Cast](./cast/)() const | पॉइंटर को उसके स्वयं के प्रकार में कास्ट करता है। |
| [Cast](./cast/)() const | static_cast का उपयोग करके पॉइंटर को बेस प्रकार में कास्ट करता है। |
| [Cast](./cast/)() const | dynamic_cast का उपयोग करके पॉइंटर को डेराइव्ड प्रकार में कास्ट करता है। |
| [Cast](./cast/)() const | dynamic_cast का उपयोग करके पॉइंटर को डेराइव्ड प्रकार में कास्ट करता है। |
| [cbegin](./cbegin/)() const | अधीन संग्रह की [cbegin()](./cbegin/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [cbegin()](./cbegin/) मेथड हो। |
| [cend](./cend/)() const | अधीन संग्रह की [cend()](./cend/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [cend()](./cend/) मेथड हो। |
| [const_pointer_cast](./const_pointer_cast/)() const | पॉइंटेड ऑब्जेक्ट पर const_cast का उपयोग करके पॉइंटर को विभिन्न प्रकार में कास्ट करता है। |
| [dynamic_pointer_cast](./dynamic_pointer_cast/)() const | पॉइंटेड ऑब्जेक्ट पर dynamic_cast का उपयोग करके पॉइंटर को विभिन्न प्रकार में कास्ट करता है। |
| [end](./end/)() | अधीन संग्रह की [end()](./end/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [end()](./end/) मेथड हो। |
| [end](./end/)() const | अधीन संग्रह की [end()](./end/) मेथड के लिए एक्सेसर। यह केवल तब कंपाइल होता है जब [SmartPtr_](./smartptr_/) वह विशेषीकरण प्रकार हो जिसमें [end()](./end/) मेथड हो। |
| [get](./get/)() const | पॉइंटेड ऑब्जेक्ट प्राप्त करता है। |
| [get_Mode](./get_mode/)() const | पॉइंटर मोड प्राप्त करता है। |
| [get_shared](./get_shared/)() const | संकेतित वस्तु प्राप्त करता है, लेकिन यह सुनिश्चित करता है कि पॉइंटर साझा मोड में है। |
| [get_shared_count](./get_shared_count/)() const | संदर्भित वस्तु के लिए मौजूद साझा पॉइंटर्स की संख्या प्राप्त करता है, जिसमें वर्तमान भी शामिल है। यह सुनिश्चित करता है कि वर्तमान पॉइंटर साझा मोड में है। |
| [GetHashCode](./gethashcode/)() const | संकेतित वस्तु पर [GetHashCode()](./gethashcode/) को कॉल करता है। |
| [GetObjectNotNull](./getobjectnotnull/)() const | वर्तमान में संदर्भित वस्तु प्राप्त करता है (यदि मौजूद हो) या अपवाद फेंकता है। |
| [GetObjectOrNull](./getobjectornull/)() const | संकेतित वस्तु प्राप्त करता है (यदि मौजूद हो) या nullptr। यह [get()](./get/) के समान है। |
| [GetObjectOwner](./getobjectowner/)() const | संदर्भित वस्तु प्राप्त करता है। |
| [GetPointer](./getpointer/)() const | संकेतित वस्तु प्राप्त करता है (यदि मौजूद हो) या nullptr। यह [get()](./get/) के समान है। |
| [Is](./is/)(const System::TypeInfo\&) const | जाँचता है कि संकेतित वस्तु विशिष्ट प्रकार की है या उसकी चाइल्ड प्रकार की। C# के 'is' सेमान्टिक का पालन करता है। |
| [IsAliasingPtr](./isaliasingptr/)() const | जाँचता है कि पॉइंटर किसी अन्य वस्तु की ओर संकेत कर रहा है न कि स्वामित्व वाली (एक aliasing कंस्ट्रक्टर द्वारा बनाई गई)। |
| [IsShared](./isshared/)() const | जाँचता है कि पॉइंटर साझा मोड में है। |
| [IsWeak](./isweak/)() const | जाँचता है कि पॉइंटर कमजोर मोड में है। |
| explicit [operator bool](./operatorbool/)() const | जाँचता है कि पॉइंटर null नहीं है। |
| [operator!](./operator!/)() const | जाँचता है कि पॉइंटर null है। |
| [operator*](./operator_/)() const | संकेतित वस्तु का रेफ़रेंस प्राप्त करता है। यह सुनिश्चित करता है कि पॉइंटर null नहीं है। |
| [operator->](./operator-_/)() const | संदर्भित वस्तु के सदस्यों तक पहुँचने की अनुमति देता है। |
| [operator<](./operator_/)(Y *) const |  [SmartPtr](./) क्लास के लिए कम-तुलना सेमान्टिक प्रदान करता है। |
| [operator<](./operator_/)(SmartPtr\<Y\> const\&) const |  [SmartPtr](./) क्लास के लिए कम-तुलना सेमान्टिक प्रदान करता है। |
| [operator=](./operator=/)(SmartPtr_\&&) | [SmartPtr](./) ऑब्जेक्ट को मूव-असाइन करता है। x अब उपयोग योग्य नहीं रहता। |
| [operator=](./operator=/)(const SmartPtr_\&) | [SmartPtr](./) ऑब्जेक्ट को कॉपी-असाइन करता है। |
| [operator=](./operator=/)(const SmartPtr\<Q\>\&) | [SmartPtr](./) ऑब्जेक्ट को कॉपी-असाइन करता है। आवश्यक प्रकार रूपांतरण करता है। |
| [operator=](./operator=/)(Pointee_ *) | कच्चे पॉइंटर को [SmartPtr](./) ऑब्जेक्ट को असाइन करता है। |
| [operator=](./operator=/)(std::nullptr_t) | पॉइंटर का मान nullptr सेट करता है। |
| [operator==](./operator==/)(std::nullptr_t) const | जाँचता है कि पॉइंटर nullptr की ओर संकेत करता है। |
| [operator[]](./operator[]/)(IdxType) const | ऐरे तत्वों के लिए एक्सेसर। केवल तब संकलित होता है जब [SmartPtr_](./smartptr_/) [System::Array](../array/) का विशेषीकरण हो। |
| [RemoveAliasing](./removealiasing/)() const | पॉइंटर से aliasing (aliasing कंस्ट्रक्टर द्वारा बनाई गई) को हटाता है, यह सुनिश्चित करता है कि वह उसी वस्तु को प्रबंधित (यदि साझा) या ट्रैक (यदि कमजोर) करता है जिस पर वह संकेत करता है। |
| [reset](./reset/)(Pointee_ *) | संकेतित वस्तु सेट करता है। |
| [reset](./reset/)() | पॉइंटर को nullptr की ओर संकेत करने के लिए बनाता है। |
| [set_Mode](./set_mode/)(SmartPtrMode) | पॉइंटर मोड सेट करता है। संदर्भित ऑब्जेक्ट की रेफ़रेंस काउंट को बदल सकता है। |
| [SetContainedTemplateWeakPtr](./setcontainedtemplateweakptr/)(uint32_t) const | पॉइंट किए गए ऑब्जेक्ट (यदि कोई हो) पर SetTemplateWeakPtr() मेथड को कॉल करता है। |
| [SmartPtr](./smartptr/)(SmartPtrMode) | आवश्यक मोड का [SmartPtr](./) ऑब्जेक्ट बनाता है। |
| [SmartPtr](./smartptr/)(std::nullptr_t, SmartPtrMode) | आवश्यक मोड का null-pointer [SmartPtr](./) ऑब्जेक्ट बनाता है। |
| [SmartPtr](./smartptr/)(Pointee_ *, SmartPtrMode) | निर्दिष्ट ऑब्जेक्ट की ओर इशारा करने वाला [SmartPtr](./) बनाता है, या रॉ पॉइंटर को [SmartPtr](./) में बदलता है। |
| [SmartPtr](./smartptr/)(const SmartPtr_\&, SmartPtrMode) | [SmartPtr](./) ऑब्जेक्ट को कॉपी कंस्ट्रक्ट करता है। दोनों पॉइंटर बाद में एक ही ऑब्जेक्ट की ओर इशारा करते हैं। |
| [SmartPtr](./smartptr/)(const SmartPtr\<Q\>\&, SmartPtrMode) | [SmartPtr](./) ऑब्जेक्ट को कॉपी कंस्ट्रक्ट करता है। दोनों पॉइंटर बाद में एक ही ऑब्जेक्ट की ओर इशारा करते हैं। यदि अनुमति हो तो टाइप कन्वर्ज़न करता है। |
| [SmartPtr](./smartptr/)(SmartPtr_\&&, SmartPtrMode) | [SmartPtr](./) ऑब्जेक्ट को मूव कंस्ट्रक्ट करता है। प्रभावी रूप से, यदि दोनों एक ही मोड के हैं तो दो पॉइंटरों को स्वैप करता है। कॉल के बाद x उपयोग योग्य नहीं रह सकता। |
| explicit [SmartPtr](./smartptr/)(const SmartPtr\<Array\<Y\>\>\&, SmartPtrMode) | संदर्भित एरे के प्रकार को अलग प्रकार के नए एरे बनाकर बदलता है। यह उपयोगी है जब C# में ऐसा एरे टाइप कास्ट हो जो C++ में समर्थित नहीं है। |
| explicit [SmartPtr](./smartptr/)(const Y\&) | खाली एरे को इनिशियलाइज़ करता है। कुछ C# कोड संरचनाओं को अनुवादित करने के लिए उपयोग किया जाता है। |
| [SmartPtr](./smartptr/)(const SmartPtr\<P\>\&, Pointee_ *, SmartPtrMode) | एक [SmartPtr](./) बनाता है जो ptr के प्रारंभिक मान के साथ स्वामित्व जानकारी साझा करता है, लेकिन एक असंबंधित और अनमैनेज्ड पॉइंटर p को रखता है। |
| [static_pointer_cast](./static_pointer_cast/)() const | पॉइंट किए गए ऑब्जेक्ट पर static_cast का उपयोग करके पॉइंटर को अलग प्रकार में कास्ट करता है। |
| [ToObjectPtr](./toobjectptr/)() const | किसी भी पॉइंटर प्रकार को [Object](../object/) के पॉइंटर में बदलता है। इसे [Pointee_](./pointee_/) प्रकार के पूर्ण होने की आवश्यकता नहीं होती। |
| static [Type](./type/)() | [Pointee_](./pointee_/) प्रकार के लिए [System::TypeInfo](../typeinfo/) ऑब्जेक्ट प्राप्त करने का शॉर्टकट। |
| [~SmartPtr](./~smartptr/)() | [SmartPtr](./) ऑब्जेक्ट को नष्ट करता है। यदि आवश्यक हो, तो पॉइंट किए गए ऑब्जेक्ट की रेफ़रेंस काउंटर को घटाता है और ऑब्जेक्ट को डिलीट करता है। |
## Typedefs

| टाइपडिफ़ | विवरण |
| --- | --- |
| [ArrayType](./arraytype/) | यदि यह [System::Array](../array/) का स्पेशलाइज़ेशन है तो [Pointee_](./pointee_/ ) के समान है, अन्यथा void। |
| [Pointee_](./pointee_/) | संदर्भित प्रकार। |
| [SmartPtr_](./smartptr_/) | स्पेशलाइज़्ड स्मार्ट पॉइंटर प्रकार। |
| [ValueType](./valuetype/) | पॉइंट किए गए एरे का स्टोरेज टाइप। केवल तभी अर्थपूर्ण है जब T, [System::Array](../array/) का स्पेशलाइज़ेशन हो। |

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

* Namespace [System](../)
* Library [Aspose.Page for C++](../../)
