2009-07-14 3 views
5

Я помню, как где-то там оператор «^» используется как оператор указателя в управляемом коде C++. Следовательно, «^» должно быть эквивалентно правилу оператора «*»?понимание String^в 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^ является указателем на управляемую кучу, aka ручка. Указатели и ручки не взаимозаменяемы.

Вызов new будет выделять объект в неуправляемой куче и возвращать указатель. С другой стороны, вызов gcnew будет выделять объект в управляемой куче и возвращать дескриптор.

Линия username = "XYZ" - это просто сахара-компилятор. Это эквивалентно

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

Это ссылка, а не указатель на сборку мусора.

Он будет выделен и освобожден автоматически, если на него больше ничего не ссылается.

2

Если вы считаете, что ^ похож на shared_ptr вы будете не далеки от истины.

Смежные вопросы