Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Note
This topic applies only to version 1 of Managed Extensions for C++. This syntax should only be used to maintain version 1 code. In the new syntax, you do not need to explicitly mark a type as unmanaged.
Explicitly declares an unmanaged type.
__nogc class-specifier
__nogc struct-specifier
__nogc interface-specifier
__nogc array-specifier
__nogc pointer-specifier
__nogc new
Remarks
The __nogc keyword is used to explicitly specify that an object is allocated on the standard C++ heap. This keyword is optional. If you don't specify __gc or __nogc in front of a class declaration, it defaults to __nogc.
Objects of this type are similar to standard C++ objects in that they are allocated from the standard C++ heap and are not subject to the restrictions of a managed object.
The __nogc keyword is also used when an object of a __value type is explicitly allocated on the standard C++ heap:
// 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;
}
Note
The __nogc keyword can also be applied to array and pointer types.
A gc pointer cannot be a member of a __nogc class. See __value for guidelines on embedding a value type in a __nogc class.
Example
In the following example, an unmanaged class is declared (X
) and an object is instantiated and modified:
// 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
}
Sample Output
48378256 4