Managed C ++ ^ (handle) - > Che cos'è e come si collega a riferimenti e puntatori
-
10-07-2019 - |
Domanda
Qual è la differenza tra un handle e un oggetto in C ++ gestito
come:
System::String^ str = gcnew System::String();
e i normali puntatori C ++?
Inoltre, in che modo si riferiscono ai riferimenti che abbiamo in C #?
Soluzione
Non stai parlando del C ++ gestito (il più vecchio), ma del C ++ / CLI, giusto?
In C #, il tuo codice è equivalente a
System.String str=new System.String();
In C ++ / CLI, un handle per un oggetto è lo stesso di un riferimento in C # - hai il conteggio dei riferimenti, il garbage collector ecc.
I puntatori C ++ ordinari, d'altra parte, sono (nella maggior parte dei casi) puntatori a oggetti non gestiti. Puoi (ovviamente) avere puntatori C ++ per gli oggetti gestiti, proprio come hai i puntatori disponibili in C # (in codice non sicuro). Cerca qui per una spiegazione dettagliata dei puntatori in C #, e qui per alcuni dettagli sui puntatori in C ++ / CLI. Questi puntatori non sono gestiti dal Garbage Collector.