2009-02-01 9 views
33

Stavo leggendo di Ivor Horton Beginning Visual C++ 2008 e molti dei suoi esempi CLR hanno questa definizione per principale:In C++/CLI, cosa fa il carattere del cappello ^?

int main(array<System::String ^> ^args) 

sono tornato, pagina per pagina, per l'inizio del libro per trovare il primo caso del genere con una spiegazione che cosa significa in realtà, ma non è stato in grado di trovarne uno.

Ovviamente significa la stessa come standard int main(int argc, char *argv[]), ma mi piacerebbe sapere quando e perché che ^ viene effettivamente utilizzato, e perché esiste anche (fa fare qualcosa che i puntatori * e riferimenti & non possono rappresentare)?

risposta

34

È un puntatore gestito: mentre * indica un puntatore a un oggetto non gestito,^indica un oggetto garbage collocato (gestito dal framework). Leggi this per ulteriori informazioni sul modo in cui i puntatori vengono gestiti in .NET.

17

Giusto per aggiungere a quella, in C++/CLI, è riuscito puntatori sono gestiti separatamente dai puntatori normali, in modo che anche loro allocare con una diversa parola chiave:

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

gestito e oggetti nativi sono due cose completamente diverse e non puoi mescolarli (beh, non facilmente).