C++/CX 中 ^ 变量的含义

7

在多年的使用C#后,我又回到了C++,开始进行一个与Windows 8/RT相关的游戏项目。在使用生成的游戏项目框架时,我遇到了下面这样的方法签名。请问有人能告诉我^符号的作用是什么吗?

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

3
这是C++/CX。它是一个WinRT句柄。 - R. Martinho Fernandes
@R.MartinhoFernandes 谢谢。请将您的评论迁移到答案中,我会标记为已解决。 - Oliver Weichhold
8
@Alex,billz:不是重复的问题。即使它们共享语法元素,C++/CX与C++/CLI不同。请不要被语法所迷惑。Oliver:我不确定我是否掌握了精确的术语或有关其功能的所有细节,所以我只是留下了一个评论,这样你就有东西可以搜索。我会让真正懂这个问题的人来写一个正确的答案。 - R. Martinho Fernandes
3个回答

7
在C++/CX中,T^是指向T对象的句柄。它实际上是一个智能指针,拥有对所指向对象的引用,同时由编译器提供了一些额外的特性。
您可以在文章“Types That Wear Hats”中找到关于帽子的所有信息。

1

显然,它被称为句柄到对象运算符。

句柄到对象运算符 ^ 被称为“帽子”,基本上是C++智能指针。它所指向的内存会在最后一个帽子超出范围或明确设置为nullptr时自动销毁。

根据:https://msdn.microsoft.com/en-us/library/hh699870.aspx。 (来自该页面的“内存管理”部分。)


-1

我现在很好奇为什么这个问题会遭到如此多的踩,而没有任何解释。caret符号在/CLI和/CX中的含义是相同的,不是吗? - Rook
@R.MartinhoFernandes,感谢您澄清这一点。如果一个答案是错误的,仅仅是简单地投反对票而不解释为什么它是错误的是相当没有帮助的,您不觉得吗? - Rook
@Rook 嗯,我在我的评论中已经解释了为什么这是错误的,即“答案涉及到一种完全不同的语言,在那种语言中,这个符号自然具有完全不同的含义”。至于其他人,我只能猜测他们没有其他要补充的解释(这也不是必要的)。 - Christian Rau
@ChristianRau,在您发表评论之前,已经有两个踩了。 是的,不需要解释踩的原因,但是如果答案并不明显愚蠢和错误,没有解释地踩无法提供任何有价值或有用的信息,那它对谁有好处呢? - Rook
1
@Rook 对不起,我忘记了已经有没有评论的踩了。他们可能依赖问题的评论来解释。但你说得对,尤其是当它如此直截了当时,他们本应该给出一个理由。 - Christian Rau
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接