Udostępnij za pośrednictwem


ref new, gcnew (C++ Component Extensions)

Agregujące słowo kluczowe ref new alokuje instancję typu, która jest zbierana przez moduł Garbage Collector, gdy obiekt stanie się niedostępny, i zwraca uchwyt (^) do zaalokowanego obiektu.

Wszystkie czasy wykonania

Pamięć dla wystąpienia typu, jest przydzielana przez ref new przydział jest cofnięty automatycznie.

ref newoperacja wyrzuca OutOfMemoryException jeśli nie może przydzielić pamięci.

Aby uzyskać więcej informacji dotyczących sposobu przydzielona i usuwania przydziałów pamięci dla typów macierzystym C++, zobacz Nowi i usunięci operatorzy.

Środowisko wykonawcze systemu Windows

Użyj ref new, aby alokować pamięć do obiektów środowiska wykonawczego systemu Windows, których okresem istnienia chcesz zarządzać automatycznie.Obiekt jest automatycznie dealokowany wtedy, kiedy jego licznik odwołań dąży do zera, co następuje po tym, jak ostatnia kopia odwołania wykroczyła poza zakres.Aby uzyskać więcej informacji, zobacz Klasy i struktury referencyjne.

te3ecsc8.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /ZW

Środowisko uruchomieniowe języka wspólnego

Pamięć dla typu zarządzanego (typu odwołania lub wartości) jest przydzielana przez gcnewi przydział jest cofany przy użyciu wyrzucania elementów bezużytecznych.

te3ecsc8.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /clr

te3ecsc8.collapse_all(pl-pl,VS.110).gifPrzykłady

Przykład

W poniższym przykładzie użyto gcnew, aby przydzielić obiekt 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;
  //...
}

Przykład

W poniższym przykładzie użyto gcnew, aby utworzyć typ wartości spakowanej do użytku w taki sam sposób, jak typ odwołania.

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

Dane wyjściowe

  

Zobacz też

Koncepcje

Składnik rozszerzeń dla platform Runtime