Cosa significa il punto di inserimento ('^') in C ++ / CLI?


212

Ho appena trovato questo codice e alcune ricerche su Google non danno alcuna spiegazione a questa misteriosa sintassi (per me).

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Cosa diavolo significa il cursore? (L' gcnewè anche nuovo per me, e ho chiesto che qui .)


6
A proposito, è pronunciato "cappello" .
kmote

Risposte:


176

Questo è C ++ / CLI e il cursore è l'equivalente gestito di un * (puntatore) che nella terminologia C ++ / CLI è chiamato "handle" per un "tipo di riferimento" (poiché è ancora possibile avere puntatori non gestiti).

(Grazie ad Aardvark per aver sottolineato la migliore terminologia.)


5
La sintassi (suppongo "riferimento non gestito") "e" esiste ancora in C ++ / CLI?
Owen,

C ++ / CLI è un'estensione del normale C ++, quindi sì - è solo per riferimenti non gestiti
1800 INFORMAZIONI

77
// 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

In generale, il punteggiatura %è ^come il punteggiatura &è *. In C ++ l' &operatore unario è in C ++ / CLI l' %operatore unario .

Mentre &ptrproduce a P*, %mngdcede a MO^.


1
Preferirei dire perché non ^ mngd invece di * mngd .. All'improvviso è confuso il permesso di usare il simbolo del puntatore non gestito (*), non il puntatore gestito (^) davanti alla variabile effettivamente dichiarata nell'heap gestito.
Swcraft,

20

Significa che questo è un riferimento a un oggetto gestito rispetto a un normale puntatore C ++. Gli oggetti dietro tali riferimenti sono gestiti dal runtime e possono essere riposizionati in memoria. Inoltre vengono automaticamente raccolti.


17

Quando è stata allocata la memoria gestita, tale memoria può essere spostata dal Garbage Collector. L'operatore ^ è un puntatore per la memoria gestita, che continua a puntare nella posizione corretta anche se il Garbage Collector sposta l'oggetto a cui punta.




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.