Cosa significa il punto di inserimento ("^") in C ++ / CLI?
Domanda
Mi sono appena imbattuto in questo codice e alcune ricerche su Google non rivelano alcuna spiegazione di questa misteriosa sintassi (per me).
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Cosa diavolo significa il cursore? (Anche il gcnew
è nuovo per me, e ho chiesto a tale proposito qui .)
Soluzione
Questo è C ++ / CLI e il cursore è gestito equivalente di un * (puntatore) che nella terminologia C ++ / CLI è chiamato 'handle' a un 'tipo di riferimento' (dato che puoi ancora avere puntatori non gestiti).
(Grazie ad Aardvark per aver sottolineato la migliore terminologia.)
Altri suggerimenti
// 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 & amp;
è *
. In C ++ l'operatore unario & amp;
è in C ++ / CLI l'operatore unario %
.
Mentre & amp; ptr
produce un P *
, % mngd
produce in MO ^
.
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 nella spazzatura.
Quando hai allocato la memoria gestita, quella memoria può essere spostata dal Garbage Collector. L'operatore ^ è un puntatore per la memoria gestita, che continua a puntare al punto corretto anche se il garbage collector sposta l'oggetto a cui punta.
Da MSDN, sembra che il cursore significhi che stai ottenendo un handle per il tipo che viene creato.
In C ++ / CLI significa un puntatore gestito. Puoi leggere di più al riguardo (e altre funzionalità C ++ / CLI) qui:
Significa che è un riferimento a un oggetto gestito.