__nogc

 

发布时间: 2016年4月

备注

本主题仅适用于 C++ 托管扩展的版本 1。 此语法应仅用于维护版本 1 代码。 在新语法中,不需要显式将类型标记为非托管。

显式声明非托管类型。

语法

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

备注

__nogc 关键字用于显式指定在标准 C++ 堆中分配对象。 此关键字是可选的。 如果在类声明前未指定 __gc__nogc,则它默认为 __nogc

此类型的对象类似于从标准 C++ 堆分配且不受托管对象限制的标准 C++ 对象。

在标准 C++ 堆中显式分配 __value 类型的对象时,也可使用 __nogc 关键字。

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

备注

__nogc 关键字还可应用于数组和指针类型。

gc 指针不能是 __nogc 类的成员。 有关在 __nogc 类中嵌入值类型的指导信息,请参阅 __value

示例

在下面的示例中,声明了非托管类 (X) 并且实例化和修改了对象:

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