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