Символ каретки '^' действует так же, как '*' в C / C ++ при объявлении типа;
// 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;
Я использую термин «указатель», когда описание управляемого объекта как управляемого объекта можно сравнить с «nullptr» так же, как указатель в C / C ++. Ссылку в C / C ++ нельзя сравнивать с 'nullptr', так как это адрес существующего объекта.
В управляемых объектах используется автоматический подсчет ссылок, что означает, что они уничтожаются автоматически, если у них нулевой счетчик ссылок, хотя если два или более недоступных объекта ссылаются друг на друга, у вас все равно будет утечка памяти. Имейте в виду, что автоматический подсчет ссылок не является бесплатным в отношении производительности, поэтому используйте его с умом.