2008-10-14 10 views
158

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

Hashtable^ tempHash = gcnew Hashtable(iterators_); 

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator(); 

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

+3

वैसे, यह [उच्चारण "टोपी"] है (https://msdn.microsoft.com/en-us/library/yk97tc08 (v = vs.120) .aspx)। – kmote

उत्तर

134

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

(बेहतर शब्दावली ओर इशारा करते हुए के लिए एर्डवार्क के लिए धन्यवाद।)

+6

मैंने देखा है कि इसे "हैंडल" करने के लिए भी प्रस्तुत किया गया है। – Aardvark

+4

क्या (मुझे लगता है कि "अप्रबंधित संदर्भ") वाक्यविन्यास "&" अभी भी सी ++/सीएलआई में मौजूद है? – Owen

+0

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

2

इसका मतलब है कि यह किसी प्रबंधित ऑब्जेक्ट का संदर्भ है।

18

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

2

सी ++/सीएलआई में इसका मतलब एक प्रबंधित सूचक है। आप और अधिक पढ़ सकते हैं इसके बारे में (और अन्य C++/CLI शामिल हैं) यहाँ:

http://en.wikipedia.org/wiki/C%2B%2B/CLI

15

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

59
// 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 

सामान्य तौर पर, punctuator % punctuator &* है के रूप में ^ है। सी ++ में unary & ऑपरेटर सी ++/सीएलआई में unary % ऑपरेटर है।

जबकि &ptrP*, %mngd उपज MO^ पर पैदा करता है।

+0

जो आप कहते हैं उसके अनुसार, आपकी आखिरी पंक्ति * mngd के बजाय% mngd होनी चाहिए, नहीं? – Geoffroy

+2

@ गेफ्रॉय: '%' ऑपरेटर को [ट्रैकिंग संदर्भ] कहा जाता है (https://msdn.microsoft.com/en-us/library/8903062a.aspx) और सैलमोमन का उत्तर सही है जैसा कि यह खड़ा है। – kmote

+0

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

संबंधित मुद्दे