Поделиться через


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

См. также

Расширения компонентов для .NET и UWP