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

ref new 聚合关键字将在对象无法访问时作为垃圾回收的类型实例,以及将句柄返回的类型实例(^)分配到已分配对象。

所有运行时

已由 ref new 分配的类型实例内容将自动进行再次分配。

如果无法分配内存,ref new 操作引发 OutOfMemoryException。

有关如何分配和释放本机 C++ 类型的内存的详细信息,请参见新建和删除运算符

Windows 运行时

使用 ref new 分配希望自动管理其生存期的 Windows 运行时对象的内存。 对象的引用计数为零时,将自动释放对象,这一操作发生于引用的最近副本超出范围之后。 有关类和结构的更多信息,请参见 Ref 类和结构

要求

编译器选项:/ZW

公共语言运行时

托管类型(引用或值类型)内存由 gcnew 分配,并通过“垃圾回收”进行再次分配。

要求

编译器选项:/clr

示例

示例

以下示例使用 gcnew 来分配消息对象。

// mcppv2_gcnew_1.cpp
// compile with: /clr
ref struct Message {
   System::String^ sender;
   System::String^ receiver;
   System::String^ 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

  32

请参见

概念

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