Managed C++ ^ (дескриптор) --› Что это такое и как оно связано со ссылками и указателями

В чем разница между дескриптором объекта в Managed C++

Такие как:

System::String^ str = gcnew System::String();

а обычные указатели С++?

Кроме того, как они связаны со ссылками, которые у нас есть в C#?


person Tony The Lion    schedule 30.11.2009    source источник


Ответы (1)


Вы говорите не о (старом) Managed C++, а о C++/CLI, верно?

В С# ваш код эквивалентен

System.String str=new System.String();

В C++/CLI дескриптор объекта аналогичен ссылке в C# — у вас есть подсчет ссылок, сборщик мусора и т. д.

С другой стороны, обычные указатели C++ (в большинстве случаев) являются указателями на неуправляемые объекты. Вы можете (конечно) иметь указатели C++ на управляемые объекты точно так же, как у вас есть указатели, доступные в C# (в небезопасном коде). См. здесь подробное объяснение указателей в C# и здесь некоторые подробности об указателях в C++/CLI. Эти указатели не обрабатываются сборщиком мусора.

person Doc Brown    schedule 17.12.2009