[.net] C ++ / CLI에서 캐럿 ( ‘^’)은 무엇을 의미합니까?

방금이 코드를 발견했으며 몇 가지 Google 검색 에서이 신비한 (나에게) 구문에 대한 설명을 얻지 못했습니다.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

캐럿은 무엇을 의미합니까? ( gcnew또한 나에게도 새롭고 여기 에 대해 물었 습니다 .)



답변

이것은 C ++ / CLI 이며 캐럿은 * (포인터)와 동일하게 관리됩니다 .C ++ / CLI 용어 에서 ‘참조 유형’에 대한 ‘핸들’ 이라고합니다 (관리되지 않는 포인터를 가질 수 있기 때문에).

더 나은 용어를 지적 해 준 Aardvark에게 감사합니다.


답변

// 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 ++에서 단항 &연산자는 C ++ / CLI에서 단항 %연산자입니다.

&ptra P*%mngd산출 하지만에 산출합니다 MO^.


답변

이는 관리 대상 개체와 일반 C ++ 포인터에 대한 참조임을 의미합니다. 이러한 참조 뒤에있는 오브젝트는 런타임에 의해 관리되며 메모리에서 재배치 될 수 있습니다. 또한 자동으로 가비지 수집됩니다.


답변

관리 메모리를 할당하면 가비지 수집기에서 해당 메모리를 이동할 수 있습니다. ^ 연산자는 관리되는 메모리에 대한 포인터이며 가비지 수집기가 가리키는 개체를 이동하더라도 올바른 위치 를 계속 가리 킵니다.


답변

MSDN에서 캐럿은 생성되는 유형에 대한 핸들을 얻는 것을 의미합니다.

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


답변

C ++ / CLI에서 관리되는 포인터를 의미합니다. 여기 (및 기타 C ++ / CLI 기능)에 대한 자세한 내용은 여기를 참조하십시오.

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


답변

관리 대상 개체에 대한 참조임을 의미합니다.