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