interior_ptr (C++/CLI)

"内部ポインター" は、参照型の内部へのポインターを宣言しますが、オブジェクト自体へのポインターは宣言しません。 内部ポインターは、参照ハンドル、値の型、ボックス化された型のハンドル、マネージ型のメンバーまたは、マネージ配列の要素を指すことができます。

すべてのランタイム

(この言語機能にはランタイムに適用される特記事項がありません。)

Windows ランタイム

(この言語機能には Windows ランタイムのみに適用される特記事項がありません。)

必要条件

コンパイラ オプション: /ZW

共通言語ランタイム

次の構文例では、内部ポインターを示します。

構文

cli::interior_ptr<cv_qualifier type> var = &initializer;

パラメーター

cv_qualifier
const または volatile 修飾子。

type
initializer の型。

var
interior_ptr 変数の名前。

initializer
参照型のメンバー、マネージド配列の要素、またはネイティブ ポインターに割り当てることができるその他のオブジェクト。

解説

ガベージ コレクション コレクターによるオブジェクトのインスタンスの移動によってマネージ ヒープ上の位置が変わるため、ネイティブ ポインターでは項目を追跡することはできません。 ポインターがインスタンスを正しく参照するように、ランタイムで、新しく配置されたオブジェクトにポインターを更新する必要があります。

interior_ptr は、ネイティブ ポインターの機能のスーパーセットを表します。 そのため、ネイティブ ポインターに割り当てることができるものは、すべて interior_ptr にも割り当てることができます。 内部ポインターは、比較演算やポインター演算など、ネイティブ ポインターと同じ一連の操作を実行できます。

内部ポインターは、スタックでのみ宣言できます。 クラスのメンバーとして、内部ポインターを宣言することはできません。

内部ポインターはスタックにのみ存在するため、内部ポインターのアドレスを取得すると、アンマネージ ポインターが発生します。

interior_ptr には bool への暗黙的な変換があり、これにより、条件付きステートメントで使用できます。

ガベージ コレクション ヒープ上に移動できないオブジェクトを指す内部ポインターを宣言する方法については、pin_ptr を参照してください。

interior_ptr は cli 名前空間に存在します。 詳細については、「Platform, default, and cli Namespaces (プラットフォーム、既定、および cli 名前空間)」を参照してください。

内部ポインターの詳細については、以下を参照してください。

必要条件

コンパイラ オプション: /clr

次の例では、参照型への内部ポインターを宣言して使用する方法を示します。

// interior_ptr.cpp
// compile with: /clr
using namespace System;

ref class MyClass {
public:
   int data;
};

int main() {
   MyClass ^ h_MyClass = gcnew MyClass;
   h_MyClass->data = 1;
   Console::WriteLine(h_MyClass->data);

   interior_ptr<int> p = &(h_MyClass->data);
   *p = 2;
   Console::WriteLine(h_MyClass->data);

   // alternatively
   interior_ptr<MyClass ^> p2 = &h_MyClass;
   (*p2)->data = 3;
   Console::WriteLine((*p2)->data);
}
1
2
3

関連項目

.NET および UWP でのコンポーネント拡張