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 gcnew
to również dla mnie nowe i zapytałem o to tutaj .)
Odpowiedzi:
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.)
źródło
W ogóle, punctuator
%
jest^
jak punctuator&
jest*
. W C ++ jednoargumentowy&
operator jest w C ++ / CLI jednoargumentowy%
.Podczas gdy
&ptr
daje aP*
,%mngd
daje przyMO^
.źródło
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.
źródło
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.
źródło
Z MSDN wygląda na to, że daszek oznacza, że otrzymujesz uchwyt do tworzonego typu.
https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx
źródło
W C ++ / CLI oznacza wskaźnik zarządzany. Możesz przeczytać więcej na ten temat (i inne funkcje C ++ / CLI) tutaj:
http://en.wikipedia.org/wiki/C%2B%2B/CLI
źródło
Oznacza to, że jest to odwołanie do zarządzanego obiektu.
źródło