interior_ptr (C++/CLI)
内部ポインターは 、オブジェクト自体に参照型の中には、ポインターを宣言します。内部ポインターは参照のハンドル、値型、ボックス化された型のハンドル、マネージ型のメンバー、またはマネージ配列の要素を参照できます。
すべてのランタイム
(すべてのランタイムに適用するこの言語機能の解説はありません)。
ランタイム ウィンドウ
(実行時ウィンドウにのみ適用されるこの言語機能の解説はありません)。
要件
コンパイラ オプション: /ZW
共通言語ランタイム
次の構文例は、内部ポインターを示します。
構文
cli::interior_ptr<cv_qualifier type> var = &initializer;
パラメーター
cv_qualifier
const か volatile の修飾子。type
初期化子の種類。var
interior_ptr 変数の名前。初期化子
マネージ配列の参照型、要素、または他のメンバー、ネイティブ ポインターに割り当てることができるオブジェクト。
解説
ネイティブ ポインターは、場所がオブジェクトのガベージ コレクターの移動のインスタンスになるマネージ ヒープで変更されるので、項目を追跡することはできません。正しくインスタンスを参照するポインターのランタイムは、最近使用されたオブジェクトへのポインターを更新する必要があります。
interior_ptr は、ネイティブ ポインターの機能のスーパーセットを表します。したがって、ネイティブ ポインターに割り当てることができるものも interior_ptrに割り当てることができます。内部ポインターが比較やポインター演算を含むネイティブ ポインターと操作のセットを実行することができます。
内部ポインターは、スタックでしか宣言できません。内部ポインターがクラスのメンバーとして宣言することはできません。
内部ポインターがスタックにしかないため、内部ポインターの yield のアドレスにアンマネージ ポインターを取得します。
interior_ptr に条件付きステートメントを使用する boolへの暗黙の型変換があります。
ガベージコレクション ヒープに移動できないオブジェクトを指す内部ポインターを宣言する方法の詳細については pin_ptrを参照してください。
interior_ptr は cli の名前空間にあります。詳細については、「プラットフォーム、既定、および cli 名前空間 (C++ コンポーネント拡張)」を参照してください。
内部ポインターの詳細については、 " " を参照してください
要件
コンパイラ オプション: /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);
}
出力