방금이 코드를 발견했으며 몇 가지 Google 검색 에서이 신비한 (나에게) 구문에 대한 설명을 얻지 못했습니다.
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
답변
이것은 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에서 단항 %
연산자입니다.
&ptr
a P*
를 %mngd
산출 하지만에 산출합니다 MO^
.
답변
이는 관리 대상 개체와 일반 C ++ 포인터에 대한 참조임을 의미합니다. 이러한 참조 뒤에있는 오브젝트는 런타임에 의해 관리되며 메모리에서 재배치 될 수 있습니다. 또한 자동으로 가비지 수집됩니다.
답변
관리 메모리를 할당하면 가비지 수집기에서 해당 메모리를 이동할 수 있습니다. ^ 연산자는 관리되는 메모리에 대한 포인터이며 가비지 수집기가 가리키는 개체를 이동하더라도 올바른 위치 를 계속 가리 킵니다.
답변
MSDN에서 캐럿은 생성되는 유형에 대한 핸들을 얻는 것을 의미합니다.
답변
C ++ / CLI에서 관리되는 포인터를 의미합니다. 여기 (및 기타 C ++ / CLI 기능)에 대한 자세한 내용은 여기를 참조하십시오.
답변
관리 대상 개체에 대한 참조임을 의미합니다.