Freigeben über


ref new, gcnew (Komponentenerweiterungen für C++)

Das ref new-Aggregatsschlüsselwort ordnet eine Instanz eines Typs zu, die in der Garbage Collection aufgenommen wurde, wenn auf das Objekt nicht mehr zugegriffen werden kann. Es gibt ein Handle (^) für das zugeordnete Objekt zurück.

Alle Laufzeiten

Speicher für eine Instanz eines Typs, der von ref new zugeordnet ist, wird automatisch freigegeben.

Ein ref new-Vorgang löst OutOfMemoryException aus, wenn kein Speicher zugewiesen werden kann.

Weitere Informationen dazu, wie Arbeitsspeicher für systemeigene C++-Typen zugeordnet und freigegeben wird, finden Sie unter Die Operatoren new und delete.

Windows-Runtime

Verwenden Sie ref new, um für Windows-Runtime-Objekte Speicher zu reservieren, deren Lebensdauer Sie automatisch verwalten möchten.Das Objekt wird automatisch freigegeben, wenn der Verweiszähler auf Null zurückgesetzt wird. Dies geschieht, nachdem die letzte Kopie des Verweises aus dem Bereich ungültig geworden ist.Weitere Informationen finden Sie unter Verweisklassen und Strukturen.

te3ecsc8.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /ZW

Common Language Runtime

Arbeitsspeicher für einen verwalteten Typ (Verweis oder Werttyp) wird durch gcnew mithilfe der Garbage Collection zugeordnet und freigegeben.

te3ecsc8.collapse_all(de-de,VS.110).gifAnforderungen

Compileroption: /clr

te3ecsc8.collapse_all(de-de,VS.110).gifBeispiele

Beispiel

Im folgenden Beispiel wird gcnew verwendet, um ein Message-Objekt zurückzugeben.

// 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;
  //...
}

Beispiel

Im folgenden Beispiel wird gcnew, um einen geschachtelten Werttyp zu erstellen, der wie ein Referenztyp verwendet wird.

// 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;
}

Ausgabe

  

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen