it-swarm.com.de

Was bedeutet das Caret (‘^’) in C ++ / CLI?

Ich bin gerade auf diesen Code gestoßen, und einige Google-Suchanfragen liefern keine Erklärung für diese (für mich) mysteriöse Syntax.

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 danach gefragt hier .)

195
Owen

Dies ist C++/CLI und das Caret ist das verwaltete Äquivalent eines * (Zeigers), der in der C++/CLI-Terminologie 'Handle' zu einem 'Referenztyp' genannt wird. (da Sie immer noch nicht verwaltete Zeiger haben können).

(Danke an Aardvark für den Hinweis auf die bessere Terminologie.)

163
Rob Walker
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object

//.. here CLI managed 
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue

Im Allgemeinen ist der Interpunktionszeichen % ist zu ^ als Interpunktionszeichen & ist zu *. In C++ ist der unäre & Operator ist in C++/CLI der unäre % Operator.

Während &ptr ergibt ein P*, %mngd ergibt MO^.

71
salomon

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 in den Speicher verschoben werden. Sie werden auch automatisch mit dem Müll eingesammelt.

19
Franci Penov

Wenn Sie verwalteten Speicher zugewiesen haben, kann dieser Speicher vom Garbage Collector verschoben werden. Der ^ -Operator ist ein Zeiger für verwalteten Speicher, der weiterhin auf die richtige -Position verweist, selbst wenn der Garbage Collector das Objekt verschiebt, auf das er zeigt.

16
Joel Coehoorn

In MSDN bedeutet das Einfügemarke, dass Sie einen Zugriff auf den zu erstellenden Typ erhalten.

https://web.archive.org/web/20150117095313/http://msdn.Microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

4
Jon Tackabury

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

3
Mark Ingram

Dies bedeutet, dass es sich um eine Referenz auf ein verwaltetes Objekt handelt.

2

Microsoft Systems Algorithm Architect - T. T. Michael Berhane, 04/22/2019

"Was bedeutet das Caret ('^') in C++/CLI?"

Offen gesagt ist das Word-Caret nur ein Platzhalter für Entwickler, um die Terminologie zu lernen. Das Zeichen '^' ist eine wissenschaftliche Notation für den Begriff "Denote" oder "Denotation". Es bedeutet nur "Hey, ich lasse das hier." bis ich diese Idee und ihre Topologie vollständig entwickelt habe. "Das ist alles, mein Freund. Viel Glück.

0