Что означает объявление С++/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. Это похоже на ссылку С++, но на управляемый объект.