Управляемый C ++ ^ (дескриптор) - > Что это такое и как это относится к ссылкам и указателям
-
10-07-2019 - |
Вопрос
В чем разница между дескриптором объекта в Managed C ++
такой как:
System::String^ str = gcnew System::String();
и обычные указатели C ++?
Кроме того, как они относятся к ссылкам, которые мы имеем в C #?
Решение
Вы говорите не о (более старом) управляемом C ++, а о C ++ / CLI, верно?
В C # ваш код эквивалентен
System.String str=new System.String();
В C ++ / CLI дескриптор объекта - это то же самое, что и ссылка в C # - у вас есть подсчет ссылок, сборщик мусора и т. д.
Обычные указатели C ++, с другой стороны, являются (в большинстве случаев) указателями на неуправляемые объекты. Вы можете (конечно) иметь указатели C ++ на управляемые объекты, точно так же, как у вас есть указатели, доступные в C # (в небезопасном коде). Смотрите здесь для получения подробного объяснения указателей и C # здесь с некоторыми подробностями об указателях в C ++ / CLI. Эти указатели не обрабатываются сборщиком мусора.