Что означает объявление C ++ / CLI Object ^% (знак процента каретки)? - PullRequest
18 голосов
/ 18 февраля 2011

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

Ответы [ 5 ]

17 голосов
/ 18 февраля 2011

Это означает «передать по ссылке»:

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

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

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

или C #:

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

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

15 голосов
/ 18 февраля 2011

% является контрольной ссылкой .

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

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

8 голосов
/ 18 февраля 2011

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

3 голосов
/ 18 февраля 2011

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

void DoSomething(System::String^% stringObject)

в C #, это выглядело бы как:

void DoSomething(ref System.String stringObject)
0 голосов
/ 18 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...