【问题标题】:What is ^ in object definition? [duplicate]对象定义中的 ^ 是什么? [复制]
【发布时间】:2012-01-22 18:17:09
【问题描述】:

可能重复:
What does the caret mean in C++/CLI?
In C++/CLR, what does a hat character ^ do?

我在 Visual Studio C++ 中创建了我的第一个 Win 表单应用程序,浏览代码看到一些我无法理解的内容:

private: System::Windows::Forms::Button^  button1;

^ 在这行签名是什么意思?我了解*&,但从未在对象定义中看到^

【问题讨论】:

  • 这是一个帽子指针。看这里:stackoverflow.com/q/500580
  • 这是因为 Windows 窗体应用程序不是 C++ 程序,而是 C++/CLI(C++ for .NET,如果您愿意)程序,它们是两种不同的语言(尽管非常相关)。如果您知道这一事实并且确实想使用 C++/CLI,那么请获得一本关于 C++/CLI 的优秀教程/书籍,因为 ^ 是一个基本概念。如果没有,那就使用其他一些 C++ 的 GUI 库。

标签: winforms c++-cli


【解决方案1】:

Have a look here 这不仅仅是 C++,而是 C++/CLI

在 C++/CLI 中,唯一的指针类型是普通 C++ 指针,.NET 引用类型通过“句柄”访问,使用新语法 ClassName^ 而不是 ClassName*。当托管和标准 C++ 代码混合使用时,这种新结构特别有用;它阐明了哪些对象在 .NET 自动垃圾回收下,以及程序员必须记住显式销毁哪些对象。

【讨论】:

  • +1 考虑到 OP 不知道 C++ 和 C++/CLI 之间的区别的可能机会的唯一答案。
【解决方案2】:

它指定一个垃圾回收指针。正常的 C++ 版本是 * 用于指针,C++/CLI 使用 ^ 来区分托管和非托管。它还使用不同的关键字来分配内存。

int* plain_cpp = new int;
delete plain_cpp; // unmanaged

int^ cpp_cli = gcnew int;
// managed, no delete possible

【讨论】:

    【解决方案3】:

    它相当于 C++/CLI 中的指针 (*)。一个关键区别是它是垃圾收集的,因为 C++/CLI 是托管的。

    【讨论】:

      【解决方案4】:

      ^ 表示它是 CLR 类型而不是 C++ 本机类型

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-09
        • 2011-02-25
        • 2015-09-06
        相关资源
        最近更新 更多