次の方法で共有


__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++ オブジェクトに似ています。

__nogc キーワードは、__value の型のオブジェクトが標準 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;
}

注意

__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