programing

C++/CLI에서 캐럿('^')은 무엇을 의미합니까?

elecom 2023. 5. 18. 20:44
반응형

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에서 캐럿은 작성 중인 유형에 대한 핸들을 얻는 것을 의미하는 것으로 보입니다.

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

즉, 관리되는 개체에 대한 참조입니다.

답을 약간 다른 방식으로 표현하는 다음 두 문장도 고려해 볼 가치가 있습니다.

"핸들 선언기(^, "모자"로 발음됨)는 시스템이 개체에 더 이상 액세스할 수 없다고 결정할 때 선언된 개체가 자동으로 삭제되어야 함을 의미하도록 형식 지정자를 수정합니다."

"네이티브 C++ 포인터(*)와 참조(&)는 관리되는 참조가 아니기 때문에 가비지 수집기는 이들이 가리키는 주소를 자동으로 업데이트할 수 없습니다.이 문제를 해결하려면 핸들 선언기를 사용하여 가비지 수집기가 인식하고 자동으로 업데이트할 수 있는 변수를 지정하십시오."

(또한 "네이티브"는 I.M.H.O.가 '핸들'보다 더 나은 단어입니다. 핸들은 아마도 'Windows SDK'를 사용하면서 더 많이 도입된 단어일 수 있기 때문입니다.)

언급URL : https://stackoverflow.com/questions/202463/what-does-the-caret-mean-in-c-cli

반응형