ref new、gcnew(C++/CLI 和 C++/CX)
ref new 聚合关键字分配在对象不可访问时垃圾回收的类型实例,并返回指向已分配对象的句柄 (^) 。
所有运行时
ref new 分配的类型实例的内存会自动解除分配。
如果无法分配内存,ref new 操作抛出 OutOfMemoryException
。
若要详细了解如何分配和解除分配本机 C++ 类型的内存,请参阅 new 和 delete 运算符。
Windows 运行时
ref new 可用于为要自动管理其生存期的 Windows 运行时对象分配内存。 对象会在其引用计数变为零(这会在引用的最后一个副本超出范围之后发生)时自动释放。 有关详细信息,请参阅 ref class 和 ref struct。
要求
编译器选项:/ZW
公共语言运行时
托管类型(引用类型或值类型)的内存由 gcnew 分配,并使用垃圾回收来解除分配。
要求
编译器选项:/clr
示例
下面的示例使用 gcnew 分配 Message 对象。
// 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;
}
32