Co oznacza daszek ('^') w C ++ / CLI?

212

Właśnie natknąłem się na ten kod i kilka wyszukiwań w Google nie wyjaśniło tej tajemniczej (dla mnie) składni.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Co do diabła znaczy daszek? (Jest gcnewto również dla mnie nowe i zapytałem o to tutaj .)

piekarnik
źródło
6
Nawiasem mówiąc, wymawia się „kapelusz” .
kmote

Odpowiedzi:

176

To jest C ++ / CLI, a kursor jest zarządzanym odpowiednikiem * (wskaźnika), który w terminologii C ++ / CLI nazywa się „uchwytem” do „typu odniesienia” (ponieważ nadal możesz mieć niezarządzane wskaźniki).

(Podziękowania dla Aardvarka za wskazanie lepszej terminologii.)

Rob Walker
źródło
5
Czy (przypuszczam, że składnia „niezarządzanego odniesienia”) „&” nadal istnieje w C ++ / CLI?
Owen
C ++ / CLI jest rozszerzeniem zwykłego C ++, więc tak - dotyczy tylko niezarządzanych referencji
1800 INFORMACJE
77
// 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

W ogóle, punctuator %jest ^jak punctuator &jest *. W C ++ jednoargumentowy &operator jest w C ++ / CLI jednoargumentowy %.

Podczas gdy &ptrdaje a P*, %mngddaje przy MO^.

łosoś
źródło
1
Wolałbym powiedzieć, dlaczego nie ^ mngd zamiast * mngd .. Nagle wprawia w zakłopotanie pozwolenie na użycie niezarządzanego symbolu wskaźnika (*), a nie wskaźnika zarządzanego (^) przed faktycznie zmienną zadeklarowaną w sterowanej stercie.
swcraft
20

Oznacza to, że jest to odwołanie do zarządzanego obiektu w porównaniu ze zwykłym wskaźnikiem C ++. Obiektami za takimi referencjami zarządza środowisko wykonawcze i można je przenieść do pamięci. Są one również zbierane automatycznie.

Franci Penov
źródło
17

Po przydzieleniu pamięci zarządzanej pamięć ta może być przenoszona przez moduł odśmiecający. Operator ^ jest wskaźnikiem dla pamięci zarządzanej, który nadal wskazuje właściwe miejsce, nawet jeśli śmieciarz przesuwa obiekt, na który wskazuje.

Joel Coehoorn
źródło
2

Oznacza to, że jest to odwołanie do zarządzanego obiektu.

1800 INFORMACJI
źródło