Ich bin gerade auf diesen Code gestoßen und einige Google-Suchanfragen haben keine Erklärung für diese mysteriöse (für mich) Syntax ergeben.
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Was zum Teufel bedeutet das Caret? (Das gcnew
ist auch neu für mich, und ich habe hier danach gefragt .)
Antworten:
Dies ist C ++ / CLI und das Caret ist das verwaltete Äquivalent eines * (Zeigers), der in der C ++ / CLI-Terminologie als 'Handle' für einen 'Referenztyp' bezeichnet wird (da Sie immer noch nicht verwaltete Zeiger haben können).
(Vielen Dank an Aardvark für den Hinweis auf die bessere Terminologie.)
quelle
Im Allgemeinen ist der Satzzeichen
%
so,^
wie der Satzzeichen&
ist*
. In C ++ ist der unäre&
Operator in C ++ / CLI der unäre%
Operator.Während
&ptr
Ausbeuten aP*
,%mngd
Ausbeuten beiMO^
.quelle
Dies bedeutet, dass dies ein Verweis auf ein verwaltetes Objekt im Vergleich zu einem regulären C ++ - Zeiger ist. Objekte hinter solchen Referenzen werden von der Laufzeit verwaltet und können im Speicher verschoben werden. Sie werden auch automatisch gesammelt.
quelle
Wenn Sie verwalteten Speicher zugewiesen haben, kann dieser Speicher vom Garbage Collector verschoben werden. Der Operator ^ ist ein Zeiger für den verwalteten Speicher, der auch dann auf die richtige Stelle zeigt, wenn der Garbage Collector das Objekt verschiebt, auf das er zeigt.
quelle
Aus MSDN geht hervor, dass das Caret bedeutet, dass Sie einen Handle für den zu erstellenden Typ erhalten.
https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx
quelle
In C ++ / CLI bedeutet dies einen verwalteten Zeiger. Weitere Informationen (und andere C ++ / CLI-Funktionen) finden Sie hier:
http://en.wikipedia.org/wiki/C%2B%2B/CLI
quelle
Dies bedeutet, dass es sich um eine Referenz auf ein verwaltetes Objekt handelt.
quelle