C++/CLI에서 캐럿('^')은 무엇을 의미합니까?
나는 방금 이 코드를 발견했고 몇몇 구글 검색은 이 신비한 구문에 대한 설명을 찾지 못했습니다.
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에 있습니다.%교환입니다.
하는 동안에&ptr을 산출합니다.P*,%mngd에 있어서의 수확량.MO^.
이는 일반 C++ 포인터가 아니라 관리 개체에 대한 참조임을 의미합니다.이러한 참조 뒤에 있는 개체는 런타임에 의해 관리되며 메모리에서 재배치할 수 있습니다.그것들은 또한 자동으로 쓰레기 수집됩니다.
관리되는 메모리를 할당하면 가비지 수집기에서 해당 메모리를 이동할 수 있습니다.그^연산자는 가비지 수집기가 가리키는 개체를 이동하더라도 계속해서 올바른 위치를 가리키는 관리되는 메모리의 포인터입니다.
C++/CLI에서 관리되는 포인터를 의미합니다.자세한 내용(및 기타 C++/CLI 기능)은 여기에서 확인할 수 있습니다.
http://en.wikipedia.org/wiki/C%2B%2B/CLI
MSDN에서 캐럿은 작성 중인 유형에 대한 핸들을 얻는 것을 의미하는 것으로 보입니다.
즉, 관리되는 개체에 대한 참조입니다.
답을 약간 다른 방식으로 표현하는 다음 두 문장도 고려해 볼 가치가 있습니다.
"핸들 선언기(^, "모자"로 발음됨)는 시스템이 개체에 더 이상 액세스할 수 없다고 결정할 때 선언된 개체가 자동으로 삭제되어야 함을 의미하도록 형식 지정자를 수정합니다."
"네이티브 C++ 포인터(*)와 참조(&)는 관리되는 참조가 아니기 때문에 가비지 수집기는 이들이 가리키는 주소를 자동으로 업데이트할 수 없습니다.이 문제를 해결하려면 핸들 선언기를 사용하여 가비지 수집기가 인식하고 자동으로 업데이트할 수 있는 변수를 지정하십시오."
(또한 "네이티브"는 I.M.H.O.가 '핸들'보다 더 나은 단어입니다. 핸들은 아마도 'Windows SDK'를 사용하면서 더 많이 도입된 단어일 수 있기 때문입니다.)
언급URL : https://stackoverflow.com/questions/202463/what-does-the-caret-mean-in-c-cli
'programing' 카테고리의 다른 글
| VB.NET에 새 스레드 생성 (0) | 2023.05.18 |
|---|---|
| "파서 오류 메시지:Global.asax의 "유형"을 로드할 수 없습니다. (0) | 2023.05.18 |
| 날짜를 숫자 형식의 엑셀에서 날짜 형식의 파이썬으로 변환 (0) | 2023.05.18 |
| 개체에 속성이 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.18 |
| 계속하기 전에 셸 스크립트를 잠시 일시 중지하려면 어떻게 해야 합니까? (0) | 2023.05.18 |