C ++ / CLI:“按钮^按钮1;”这是什么意思?

时间:2015-04-25 06:29:34

标签: class visual-studio-2012 c++-cli operator-keyword

我使用一个按钮和onClick事件在C ++ / CLI中创建了一个WindowsForm类。我查看了源代码并看到了这个:

public ref class MyForm : public System::Windows::Forms::Form
{
public:
    MyForm(void)
    {
        InitializeComponent();
        //
        //TODO: Add the constructor code here
        //
    }

protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~MyForm()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::Button^  button1;

    ...

private: System::Void onClickButton1(System::Object^  sender, System::EventArgs^  e) {
         }

}

我想问一下:在类中声明按钮(^)时Button^ button1;运算符的含义是什么?

2 个答案:

答案 0 :(得分:1)

使用句柄声明符^声明的变量的行为类似于指向对象的指针。您可以使用->来访问该对象的成员。 CLR垃圾收集器机制确定是否不再使用该对象并且可以将其删除,这意味着资源管理变得更容易。与C ++中的原始指针不同,当您使用它们时需要delete

答案 1 :(得分:0)

^Handle to Object operator

  

句柄声明符(^,发音为“hat”)修改了类型说明符,表示当系统确定该对象不再可访问时,应自动删除声明的对象。

因此Button^声明指向垃圾收集的Button对象的指针,该对象使用gcnew而不是new分配:

  

ref new aggregate关键字分配一个类型的实例,该类型在对象变得不可访问时被垃圾收集,并返回一个句柄(^)到分配的对象。