C ++ / CLI में कैरेट ('^') का क्या अर्थ है?


212

मैं अभी इस कोड में आया था और कुछ Google खोजों ने इस रहस्यमय (मेरे लिए) वाक्यविन्यास का कोई स्पष्टीकरण नहीं दिया।

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

बिल्ली के बच्चे का क्या मतलब है? (यह gcnewमेरे लिए भी नया है, और मैंने यहां के बारे में पूछा है ।)


जवाबों:


176

यह C ++ / CLI है और कैरेट एक * (पॉइंटर) का प्रबंधित समतुल्य है जो C ++ / CLI शब्दावली में 'संदर्भ प्रकार' के लिए एक ' हैंडल' कहलाता है (क्योंकि आप अभी भी अप्रबंधित बिंदु हो सकते हैं)।

(बेहतर शब्दावली को इंगित करने के लिए Aardvark के लिए धन्यवाद।)


5
क्या (मैं "अप्रबंधित संदर्भ") वाक्यविन्यास "और" अभी भी C ++ / CLI में मौजूद है?
ओवेन

सी ++ / सीएलआई नियमित सी ++ का एक विस्तार है, इसलिए हां - यह केवल अप्रबंधित संदर्भों के लिए है
1800 सूचना

77
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object

//.. here CLI managed 
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue

सामान्य तौर पर, पंक्चुएटर %को पंचक के ^रूप में जाना &जाता है *। C ++ में unary &ऑपरेटर C ++ / CLI में unary %ऑपरेटर है।

जबकि &ptrपैदावार ए P*, %mngdपैदावार MO^


1
मैं यह कहूंगा कि क्यों नहीं ^ mngd के बजाय * mngd .. यह अचानक अप्रमाणित पॉइंटर प्रतीक (*) का उपयोग करने की अनुमति देता है, प्रबंधित पॉइंटर (^) नहीं है वास्तव में प्रबंधित हीप में घोषित चर के सामने।
स्वैटर

20

इसका मतलब है कि यह एक प्रबंधित वस्तु बनाम एक नियमित C ++ पॉइंटर का संदर्भ है। ऐसे संदर्भों के पीछे वस्तुओं को रनटाइम द्वारा प्रबंधित किया जाता है और मेमोरी में स्थानांतरित किया जा सकता है। वे स्वचालित रूप से कचरा-एकत्र भी होते हैं।


17

जब आप प्रबंधित मेमोरी आवंटित करते हैं, तो उस मेमोरी को कचरा संग्राहक द्वारा इधर-उधर ले जाया जा सकता है। ^ ऑपरेटर प्रबंधित मेमोरी के लिए एक पॉइंटर है, जो सही जगह को इंगित करना जारी रखता है, भले ही कचरा कलेक्टर उस ऑब्जेक्ट को स्थानांतरित करता है जो इसे इंगित करता है।


4

MSDN से, ऐसा लगता है कि कैरट का मतलब है कि आपको बनाया जा रहा प्रकार का हैंडल मिल रहा है।

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx


मृत लिंक (2018)
gbarry

संग्रह का लिंक तय कर दिया। ईमानदारी से, MSDN लिंक इतने नाजुक हैं कि सभी नए MSDN लिंक शुरू से ही आर्काइव.ऑर्ग के माध्यम से चलने चाहिए।
anssssss


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.