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 .)

È stato utile?

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.

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

In C ++ / CLI significa un puntatore gestito. Puoi leggere di più al riguardo (e altre funzionalità C ++ / CLI) qui:

http://en.wikipedia.org/wiki/C%2B % 2B / CLI

Significa che è un riferimento a un oggetto gestito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top