Condividi tramite


__nogc

Nota

Questo argomento si applica solo alla versione 1 delle estensioni gestite per C++.Questa sintassi deve essere utilizzata solo per gestire il codice della versione 1.Nella nuova sintassi, non è necessario contrassegnare in modo esplicito un tipo come non gestito.

Dichiara in modo esplicito un tipo non gestito.

__nogc class-specifier 
__nogc struct-specifier 
__nogc interface-specifier 
__nogc array-specifier 
__nogc pointer-specifier 
__nogc new

Note

La parola chiave __nogc viene utilizzata per specificare in modo esplicito che un oggetto viene allocato nell'heap C++ standard. Questa parola chiave è facoltativa. Se non si specifica __gc o __nogc prima della dichiarazione di classe, viene impostato in modo predefinito su __nogc.

Gli oggetti di questo tipo sono simili a oggetti C++ standard in quanto vengono allocati dall'heap C++ standard e non sono soggetti alle limitazioni di un oggetto gestito.

La parola chiave __nogc viene inoltre utilizzata quando viene allocato in modo esplicito un oggetto di un tipo __value nell'heap C++ standard.

// keyword__nogc.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
__value struct V { 
   int i;
};
int main() {
   V * v = __nogc new V;
   v->i = 10;
   delete v;
}

Nota

La parola chiave __nogc può essere inoltre applicata ai tipi matrice e puntatore.

Un puntatore gc non può essere membro di una classe __nogc. Vedere __value per indicazioni su come incorporare un tipo di valore in una classe __nogc.

Esempio

Nell'esempio seguente, viene dichiarata una classe non gestita (X) viene inoltre creata un'istanza dell'oggetto che viene in seguito modificato:

// keyword__nogc_2.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;

__nogc class X {
public:
   int i;
};

int main() {
   X* x;   // declares an unmanaged pointer of type X
   x = new X();   // creates unmanaged object of type X on the C++ heap
   Console::WriteLine(x->i);

   x->i = 4;   // modifies unmanaged object
   Console::WriteLine(x->i);

   delete x;   // call C++ delete operator to clean up resource
}