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