Compartilhar via


__nogc

Dica

Este tópico se aplica somente à versão 1 de Managed Extensions for C++.Esta sintaxe só deve ser usada para manter o código da versão 1.Na nova sintaxe, você não precisa marcar explicitamente um tipo como não gerenciado.

Declara explicitamente um tipo não gerenciado.

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

Comentários

A palavra-chave __nogc é usada para especificar explicitamente que um objeto é alocado no heap padrão C++. Essa palavra-chave é opcional. Se você não especificar __gc ou __nogc na frente de uma declaração de classe, o padrão será __nogc.

Os objetos desse tipo são semelhantes aos objetos padrão C++ que são alocados do heap padrão C++ e não estão sujeitos às restrições de um objeto gerenciado.

A palavra-chave __nogc também é usada quando um objeto de um tipo __value alocado explicitamente no heap padrão C++:

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

Dica

A palavra-chave __nogc também pode ser aplicada a tipos de matriz e ponteiro.

Uma ponteiro gc não pode ser membro de uma classe __nogc. Consulte __value para saber as diretrizes para inserir um tipo de valor em uma classe __nogc.

Exemplo

No exemplo a seguir, uma classe não gerenciada é declarada (X) e um objeto é instanciado e modificado:

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