ref new、gcnew(C++ 组件扩展)

ref new聚合的关键字分配进行垃圾回收时对象变得不可访问,并返回的句柄类型的实例 (^) 来分配的对象。

所有的运行库

内存分配的类型的实例的ref new被自动释放。

A ref new操作引发OutOfMemoryException时无法分配内存。

有关如何分配和释放内存的本机 c + + 类型的详细信息,请参阅的新删除操作员和

Windows 运行时

使用ref new为 Windows 运行时对象的生存期,要进行自动管理分配内存。 该对象是自动释放时其引用计数变为 0。 例如,当对象超出范围。

te3ecsc8.collapse_all(zh-cn,VS.110).gif要求

编译器选项:/ZW

te3ecsc8.collapse_all(zh-cn,VS.110).gif示例

示例

下面的示例使用ref new分配消息对象。

// mcppv2_ref_new_1.cpp
// compile with: /ZW

using namespace Platform;

ref struct Message {
   String^ sender;
   String^ receiver;
   String^ data;
};

int main(Array<String^>^ args) {
   Message^ h_Message  = ref new Message;
}

公共语言运行时

为托管类型 (引用或值类型) 的内存分配的gcnew,和通过使用垃圾回收释放的。

te3ecsc8.collapse_all(zh-cn,VS.110).gif要求

编译器选项:/clr

te3ecsc8.collapse_all(zh-cn,VS.110).gif示例

示例

下面的示例使用gcnew分配消息对象。

// mcppv2_gcnew_1.cpp
// compile with: /clr
ref struct Message {
   System::String ^ sender, ^ receiver, ^ data;
};

int main() {
   Message ^ h_Message  = gcnew Message;
}

示例

下面的示例使用gcnew来创建使用如引用类型的装箱的值类型。

// example2.cpp : main project file.
// compile with /clr
using namespace System;
value class Boxed {
    public:
        int i;
};
int main()
{
    Boxed^ y = gcnew Boxed;
    y->i = 32;
    Console::WriteLine(y->i);
    return 0;
}

Output

  

请参见

概念

适用于运行时平台的组件扩展