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 .)


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.)


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^.


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.


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.




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.