Что означает объявление С++/CLI Object ^% (знак процента)?

Это, по-видимому, является доказательством Google, поскольку я не могу заставить поисковые системы не выбрасывать лишние символы. Я также смотрел MSDN в С++-ссылке, но я не могу найти ссылку на С++/CLI, потому что в разделе объявлений на ней ничего нет.

Ответы

Ответ 1

% является ссылкой отслеживания.

Он похож на нативную ссылку (Object&), но ссылка на отслеживание может ссылаться на объект CLR, в то время как внутренняя ссылка не может. Различие необходимо, потому что сборщик мусора может перемещать объекты CLR, поэтому адрес памяти CLR-объекта может измениться.

^ просто означает, что он управляется. См. MSDN, а также этот SO post.

Ответ 2

Это означает "пройти по ссылке":

 void bar::foo(Object^% arg) {
    arg = gcnew Object;    // Callers argument gets updated
 }

То же самое в С++:

 void foo(Object** arg) {
    *arg = new Object;
 }

или С#:

 void foo(out object arg) {
     arg = new Object();
 }

С++/CLI не различает ref и out, у него нет определенной функции проверки присвоения, что язык С# так не нужно различать между этими двумя. То же самое в VB.NET, ByRef vs ByVal.

Ответ 3

По существу, это "управляемая" версия Object*& и эквивалентна ref или out для ссылочного типа в С#.

Ответ 4

Это управляемый указатель по ссылке. Итак, если у вас есть что-то вроде:

void DoSomething(System::String^% stringObject)

в С# он будет выглядеть так:

void DoSomething(ref System.String stringObject)

Ответ 5

Это С++/CLI Tracking Reference. Это похоже на ссылку С++, но на управляемый объект.