【问题标题】:What is the "^" symbol for when declaring or defining a member? [duplicate]声明或定义成员时的“^”符号是什么? [复制]
【发布时间】:2013-04-24 05:35:04
【问题描述】:

我目前正在学习快速教程。异或“^”符号出现在我以前从未见过的地方。如果我声明一个指向对象的指针,星号的确切位置。 在下面的代码 sn-p 中查看。

COpenGL(System::Windows::Forms::Form ^ parentForm, 
            GLsizei iWidth, GLsizei iHeight)
    {
        CreateParams^ cp = gcnew CreateParams;

        // Set the position on the form
        cp->X = 100;
        cp->Y = 100;
        cp->Height = iWidth;
        cp->Width = iHeight;

之后对象 cp 被取消引用,就好像它是一个指向 CreateParams 类型对象的指针。

那么.... ^ 是什么意思?谷歌不太友好。

【问题讨论】:

    标签: c++-cli


    【解决方案1】:

    ^ 是 Microsoft 对 C++ 扩展的一部分,即 C++/CLI 或 C++/CX。微软引入它来表示垃圾收集的指针,用于 .NET 或 WinRT。您会看到 gcnew 调用 - 这意味着这不是“正常”的内存分配,而是从运行时垃圾收集的内存。

    【讨论】:

    • C++/CX 完全不同。
    • @KerrekSB 确实是这样,但它使用相同的 ^ 表示法,尽管底层的机制有些不同。
    • 谢谢,通过调用 gcnew 创建的指向对象的指针由 ^ 捐赠。伙计们干杯
    • @GuyJoelMcLean 是的,但请注意,重要的不仅仅是创作。它在很多方面都无法与普通的 C 指针相提并论,因为垃圾收集器“跟踪”它指向的内存,并在对象不再使用时释放该内存。
    【解决方案2】:

    C++/CLI 是与 C++ 不同的语言。它是 C++ 的一种扩展。关键的新特性是垃圾收集的 CLI 对象。 T ^ 类型表示一个指向此类对象的跟踪指针,该对象是使用新关键字gcnew 创建的。同样,T % 表示跟踪的引用

    事实上,类型系统中有一个全新的部分,即“托管类”的概念(指定为ref class/ref struct),它具有析构函数终结器。事实上,我曾经对此感到非常困惑,以至于我 asked a question 对此感到困惑。

    Herb Sutter 的 design rationale for C++/CLI 是一本优秀的读物。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多