Managed C ++ ^ (Handle) -> Was ist das und wie verhält sie sich auf Referenzen und Zeiger
-
10-07-2019 - |
Frage
Was ist der Unterschied zwischen einem Handgriff zu einem Objekt in Managed C ++
wie:
System::String^ str = gcnew System::String();
und die gewöhnlichen C ++ Zeiger?
Auch in welcher Beziehung stehen sie zu den Referenzen wir in C #?
Lösung
Sie sprechen nicht über (der älteren) Managed C ++, aber etwa C ++ / CLI, nicht wahr?
In C # Code entspricht
System.String str=new System.String();
In C ++ / CLI, ein Handle für ein Objekt ist genau das gleiche wie eine Referenz in C # -. Sie Referenzzählung haben, Garbage Collector etc
Ordinary C ++ Zeiger, auf der anderen Seite, sind (in den meisten Fällen) Zeiger auf nicht verwalteten Objekte. Sie können (natürlich) haben C ++ Zeiger auf verwaltete Objekte, so wie Sie Zeiger in C # (in unsicheren Code). Schauen Sie hier für eine detaillierte Erklärung von Zeigern in C # und hier für einige Details über Zeiger in C ++ / CLI. Diese Zeiger werden nicht vom Garbage Collector behandelt.