В С++/CLI, что делает символ шляпы?
Я читал Ivor Horton Начиная Visual С++ 2008, и многие из его примеров CLR имеют это определение для main:
int main(array<System::String ^> ^args)
Я вернулся, за страницей, в начало книги, чтобы найти первый такой экземпляр с объяснением, что он на самом деле означает, но не смог найти его.
Очевидно, это означает то же, что и стандартный int main(int argc, char *argv[])
, но я хотел бы знать, когда и почему этот ^
действительно используется и почему он даже существует (делает ли он что-то, что указывает *
и ссылки &
не может представлять)?
Ответы
Ответ 1
Это управляемый указатель - в то время как * отмечает указатель на неуправляемый объект, ^ указывает на собранный мусором объект (обрабатываемый каркасом). Прочтите этот для получения дополнительной информации о том, как указатели обрабатываются в .NET.
Ответ 2
Чтобы добавить к этому, в С++/CLI управляемые указатели обрабатываются отдельно от обычных указателей, поэтому вы даже выделяете их с другим ключевым словом:
NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();
Управляемые и Родные объекты - две совершенно разные вещи, и вы не можете их смешивать (ну, не легко).
Ответ 3
Смотрите это для полного обсуждения: http://msdn.microsoft.com/de-de/library/yk97tc08.aspx:
дескриптор объекта на управляемом куча указывает на "весь" объект и а не члену объекта.