2009-07-14 3 views
5

어딘가에 "^"연산자가 Managed C++ 코드의 포인터 연산자로 사용 된 것을 기억합니다. 따라서 "^"연산자는 "*"연산자와 동등해야합니다 ?? 나는 닷넷을 이해하기 시작하고 몇 가지 예제 프로그램을 코딩 할 때문자열^C++ .Net에서

, 나의 이해가 맞아 가정하면,이 같은 일부 코드 건너 온 :

String ^username; //my understanding is you are creating a pointer to string obj 
. 
.   // there is no malloc or new that allocates memory to username pointer 
. 
username = "XYZ"; // shouldn't you be doing a malloc first??? isn't it null pointer 

을 내가 문제가이 문제를 이해하는 데.

답변

8

String^핸들으로 관리되는 힙에 대한 포인터입니다. 포인터와 핸들은 상호 교환 할 수 없습니다.

new을 호출하면 관리되지 않는 힙에 개체가 할당되고 포인터가 반환됩니다. 반면에 gcnew을 호출하면 관리되는 힙에 개체가 할당되고 핸들이 반환됩니다.

라인 username = "XYZ"은 컴파일러 설탕에 불과합니다. 당신이 ^ 당신이하지 진실에서 멀리있을 것이다 shared_ptr에 유사하다고 생각하면 그것은

username = gcnew String(L"XYZ"); 
3

가비지 수집 문자열에 대한 포인터가 아닌 참조입니다.

아무 것도 참조하지 않을 때 자동으로 할당되고 할당이 해제됩니다.

2

에 해당합니다.