Значение переменных ^ в C++/CX

Я только что вернулся к C++ для проекта, связанного с игрой для Windows 8/RT, после многих лет отсутствия в пользу C#.

Работая со сгенерированным скелетом игрового проекта, я наткнулся на сигнатуры методов, подобные приведенной ниже. Может ли кто-нибудь просветить меня, что должен делать ^?

Concurrency::task<Platform::Array<byte>^> ReadDataAsync(Platform::String^ filename)

person Oliver Weichhold    schedule 08.11.2012    source источник
comment
Это С++/СХ. Это дескриптор WinRT.   -  person R. Martinho Fernandes    schedule 08.11.2012
comment
@R.MartinhoFernandes Спасибо. Перенесите свой комментарий в ответ, и я отмечу его решенным.   -  person Oliver Weichhold    schedule 08.11.2012
comment
@Alex, billz: нет, это не дубликат. C++/CX отличается от C++/CLI, даже если они имеют общие синтаксические элементы. Пожалуйста, не ведитесь на синтаксис. Оливер: Я не уверен, получил ли я точную терминологию или все подробности о том, что именно он делает, поэтому я просто оставил комментарий, чтобы у вас было что-то, что вы можете найти в Google. Я оставлю написание правильного ответа для кого-то, кто действительно знает.   -  person R. Martinho Fernandes    schedule 08.11.2012


Ответы (3)


В C++/CX T^ — это дескриптор объекта T. По сути, это интеллектуальный указатель, которому принадлежит ссылка на объект, на который он указывает, с некоторыми дополнительными бонусными функциями, предоставляемыми компилятором.

Все о головных уборах вы можете узнать в статье "Типы которые носят шляпы."

person James McNellis    schedule 08.11.2012

По-видимому, это называется оператором дескриптора объекта.

Оператор дескриптора объекта ^ известен как «шляпа» и, по сути, является интеллектуальным указателем C++. Память, на которую он указывает, автоматически уничтожается, когда последняя шляпа выходит из области видимости или явно устанавливается в nullptr.

Согласно: https://msdn.microsoft.com/en-us/library/hh699870.aspx. (Из раздела «Управление памятью» на этой странице.

person Elliot    schedule 16.03.2015

Символ ^ — это дескриптор объекта.

Например, String^ s; объявляет дескриптор объекта 'String'.

http://en.wikipedia.org/wiki/C%2B%2B/CLI#Handles

person Software_Designer    schedule 08.11.2012
comment
И ссылка на C++/CLI - Ну. Это C++/CX, совершенно другой язык. Не обманывайтесь неправильной причиной закрытия этого вопроса. - person Christian Rau; 08.11.2012
comment
Теперь я очарован тем, почему это заслужило так много отрицательных голосов без каких-либо объяснений, почему. Токен вставки имеет одинаковое значение как в /CLI, так и в /CX, не так ли? - person Rook; 08.11.2012
comment
@Rook: не так ли? (Насколько мне известно, на одном языке это означает управляемый дескриптор CLR, на другом — дескриптор WinRT с подсчетом ссылок; для меня это звучит иначе). Если это означает то же самое, укажите это в ответе. (этот так не делает.) - person R. Martinho Fernandes; 08.11.2012
comment
@R.MartinhoFernandes, спасибо, что прояснили это. Если ответ неверен, простое голосование против без объяснения, почему это неправильно, довольно бесполезно, не так ли? - person Rook; 08.11.2012
comment
@Rook Ну, я для себя дал объяснение, почему это неправильно, в моем комментарии, то есть ответ относится к совершенно другому языку, где этот символ, естественно, имеет совершенно другое значение. А что касается других, я мог только догадываться, что у них не было другого объяснения (которое в любом случае не нужно). - person Christian Rau; 08.11.2012
comment
@ChristianRau было 2 отрицательных голоса, прежде чем вы прокомментировали. И да, нет необходимости объяснять отрицательный голос, но если ответ не явно глупый и неправильный, отрицательный голос без объяснения причин почти не дает никакой полезной или ценной информации, так кому это выгодно? - person Rook; 08.11.2012
comment
@Rook Ах, извините, не помнил, что уже были отрицательные голоса без комментариев. Вероятно, они полагались на комментарии к вопросу для объяснения. Но вы правы в том, что они могли указать причину, особенно когда это так прямолинейно. - person Christian Rau; 08.11.2012