ref new, gcnew (C++/CLI и C++/CX)
Агрегатное ключевое слово ref new выделяет экземпляр типа, который является мусором, собираемым, когда объект становится недоступным, и возвращает дескриптор (^) выделенному объекту.
Все среды выполнения
Память для экземпляра типа, выделяемая ref new, освобождается автоматически.
Операция ref new вызывает исключение OutOfMemoryException
, если не удается выделить память.
Дополнительные сведения о выделении и освобождении памяти для собственных типов C++ см. в статье Операторы new и delete.
Среда выполнения Windows
Используйте ref new, чтобы выделить память для объектов среды выполнения Windows, время существования которых требуется администрировать автоматически. Объект автоматически освобождается, когда число ссылок становится равным нулю, что происходит после выхода последней копии ссылки за пределы области. Подробные сведения см. в статье Ref classes and structs (C++/CX) (Ссылочные классы и структуры (C++/CX)).
Требования
Параметр компилятора: /ZW
Среда CLR
Память для управляемого типа (типа ссылки или значений) выделяется с помощью 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