2009-07-14 18 views
5

Ricordo di aver visto da qualche parte l'operatore "^" è usato come operatore puntatore nel codice C++ gestito. Quindi "^" dovrebbe essere equivalente a "*" operatore giusto ??comprensione String^in C++ .Net

Supponendo la mia comprensione è giusto, quando ho iniziato a comprendere .Net e codificato alcuni programmi di esempio, mi sono imbattuto in un po 'di codice come questo:

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 

Sto avendo difficoltà a capire questo.

risposta

8

String^ è un puntatore all'heap gestito, alias handle. I puntatori e le maniglie non sono intercambiabili.

La chiamata new alloca un oggetto su un heap non gestito e restituisce un puntatore. D'altra parte, chiamare gcnew assegnerà un oggetto su un heap gestito e restituirà un handle.

La riga username = "XYZ" è semplicemente uno zucchero del compilatore. È equivalente a

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

Questo è un riferimento, non un puntatore, a una stringa raccolta inutilmente.

Sarà assegnato e deallocato automaticamente, quando nulla lo fa più riferimento.

2

Se si considera che ^ è simile a shared_ptr sarà non lontano dalla verità.