Das Caret '^' verhält sich in C/C++ beim Deklarieren eines Typs gleich dem '*';
// pointer to new std::string object -> memory is not garbage-collected
std::string* strPtr = new std::string;
// pointer to System::String object -> memory is garbage-collected
System::String^ manStr = gcnew System::String;
Ich verwende den Begriff ‚Zeiger‘, wenn das verwaltete Objekt als verwaltete Objekt beschreiben kann ‚nullptr‘ verglichen werden, wie ein Zeiger in C/C++. Eine Referenz in C/C++ kann nicht mit 'nullptr' verglichen werden, da sie die Adresse eines vorhandenen Objekts ist.
Verwaltete Objekte verwenden automatisches Referenzzählen, was bedeutet, dass sie automatisch zerstört werden, wenn sie einen Referenzzähler von Null haben. Wenn jedoch zwei oder mehr unerreichbare Objekte aufeinander verweisen, haben Sie immer noch ein Speicherleck. Seien Sie gewarnt, dass das automatische Referenzzählen nicht kostenlos ist, also verwenden Sie es mit Bedacht.
Sie können über einige der C++/CLI-Funktionen hier lesen: http://en.wikipedia.org/wiki/C%2B%2B/CLI –
das Caret '^' verhält sich wie das '*' bei der Deklaration eines verwalteter Typ, dh; Std :: Zeichenfolge * str; // Zeiger auf std :: string - kann nulptr sein – user2796283