共通型システムのポインタ
更新 : 2007 年 11 月
ポインタは、特別な種類の変数です。ランタイムでは、マネージ ポインタ、アンマネージ ポインタ、およびアンマネージ関数ポインタという 3 種類のポインタがサポートされています。
マネージ ポインタは、マネージ ヒープ上のオブジェクトを指すポインタで、マネージ アプリケーションで使用できる新しいタイプのポインタです。マネージ ポインタは、共通言語ランタイムのヒープからメモリのマネージ ブロックへの参照です。自動ガベージ コレクションは、このヒープ上で実行されます。マネージ ポインタは、参照渡しされたメソッド引数に対して生成されます。言語によっては、他の方法でマネージ ポインタを生成するものもあります。3 種類のポインタの中で、マネージ ポインタだけが CLS 準拠です。
メモ : |
---|
Visual C++ 2002 および Visual C++ 2003 では、マネージ ポインタを宣言するのに __gc * が使用されていました。これが Visual C++ 2005 では、^ に置き換わりました。たとえば ArrayList^ al = gcnew ArrayList(); のように使用されます。 |
アンマネージ ポインタは、標準 C++ ヒープからメモリのアンマネージ ブロックを参照する従来型の C++ ポインタです。アンマネージ ポインタは CLS には含まれていないため、言語によっては、アンマネージ ポインタを定義したりアンマネージ ポインタにアクセスしたりするための構文が提供されない場合もあります。アンマネージ ポインタのサポートについては、使用言語のドキュメントを参照してください。
アンマネージ関数ポインタも、関数のアドレスを参照する従来型の C++ ポインタです。CLS は、アンマネージ関数ポインタのマネージ バージョンとしてデリゲートを提供しています。
ポインタ型は明示的に定義する必要はありません。ポインタの型を判別するために必要なすべての情報は、ポインタが宣言されるときに指定されます。
ポインタ型は参照型ですが、ポインタ型の値はオブジェクトではないため、ポインタ型の値から厳密な型を判断することはできません。
共通型システムは、ポインタ型に対して、ポインタによって参照される位置からの値の読み込みと、その位置への値の書き込みという 2 種類のタイプ セーフな操作をサポートしています。これらのタイプ セーフな操作は CLS に準拠しています。
また、共通型システムは、ポインタ型に対して、ポインタへの整数の加算、ポインタからの整数の減算、および 1 つのポインタからの別のポインタの減算という、3 つのバイトベースのアドレス算術演算もサポートしています。最初の 2 つの算術演算では、元のポインタと同じ型の値が返されます。バイトベースの演算は CLS に準拠していません。