2009-07-14 64 views
5

我記得在某處看到「^」運算符被用作託管C++代碼中的指針運算符。因此「^」應該等價於「*」操作符?瞭解String^in C++ .Net

假設我的理解是正確的,當我開始理解.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