C ++ géré ^ (handle) - > De quoi s'agit-il et quel est son rapport avec les références et les pointeurs
-
10-07-2019 - |
Question
Quelle est la différence entre un descripteur et un objet dans Managed C ++
tels que:
System::String^ str = gcnew System::String();
et les pointeurs C ++ ordinaires?
De plus, en quoi sont-ils liés aux références que nous avons en C #?
La solution
Vous ne parlez pas de l'ancien C ++ managé, mais de C ++ / CLI, n'est-ce pas?
En C #, votre code est équivalent à
.System.String str=new System.String();
Dans C ++ / CLI, un descripteur d'objet est identique à une référence en C #: vous disposez d'un comptage de références, d'un garbage collector, etc.
Les pointeurs C ++ ordinaires, en revanche, sont (dans la plupart des cas) des pointeurs sur des objets non gérés. Vous pouvez (bien sûr) avoir des pointeurs C ++ sur les objets gérés, comme vous le feriez avec des pointeurs disponibles en C # (en code non sécurisé). Regardez ici pour une explication détaillée des pointeurs en C #, ici pour obtenir des détails sur les pointeurs dans C ++ / CLI. Ces pointeurs ne sont pas gérés par le ramasse-miettes.