In C ++ / CLI, cosa fa il carattere del cappello ^?

Stavo leggendo Beginning Visual C ++ 2008 di Ivor Horton e molti dei suoi esempi CLR hanno questa definizione per main:

int main(array ^args) 

Sono tornato, pagina per pagina, all’inizio del libro per trovare la prima istanza di questo tipo con una spiegazione su cosa significhi realmente, ma non potrei trovarne uno.

Ovviamente significa lo stesso del int main(int argc, char *argv[]) standard int main(int argc, char *argv[]) , ma mi piacerebbe sapere quando e perché questo ^ è veramente usato, e perché esiste anche (fa qualcosa che punta a * e riferimenti & non può rappresentare)?

È un puntatore gestito – mentre * indica un puntatore a un object non gestito, ^ punta a un object garbage collection (gestito dal framework). Leggi questo per ulteriori informazioni sul modo in cui i puntatori vengono gestiti in .NET.

Solo per aggiungere a ciò, in C ++ / CLI, i puntatori gestiti vengono gestiti separatamente dai normali puntatori, quindi li si assegna anche a una parola chiave diversa:

 NativeObject* n = new NativeObject(); ManagedObject^ m = gcnew ManagedObject(); 

Gli oggetti gestiti e nativi sono due cose completamente diverse e non è ansible combinarli (bene, non facilmente).

Vedi questo per una discussione completa: http://msdn.microsoft.com/de-de/library/yk97tc08.aspx :

Un handle per un object sull’heap gestito punta all’object “intero” e non a un membro dell’object.