方法: interior_ptr キーワードを含む値型を宣言する (C++/CLI)
値型で Interior_ptr を使用できます。
重要
この言語機能は、/clr
コンパイラ オプションではサポートされていますが、/ZW
コンパイラ オプションではサポートされていません。
例: 値型の interior_ptr
説明
次の C++/CLI の例では、値型で interior_ptr を使用する方法を示します。
コード
// interior_ptr_value_types.cpp
// compile with: /clr
value struct V {
V(int i) : data(i){}
int data;
};
int main() {
V v(1);
System::Console::WriteLine(v.data);
// pointing to a value type
interior_ptr<V> pv = &v;
pv->data = 2;
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
// pointing into a value type
interior_ptr<int> pi = &v.data;
*pi = 3;
System::Console::WriteLine(*pi);
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
}
1
2
2
3
3
3
例: this
ポインター
説明
値型では、this
ポインターは interior_ptr に評価されます。
値型 V
の非静的メンバー関数の本文で、this
は interior_ptr<V>
型の式であり、その値が関数によって呼び出されるオブジェクトのアドレスになります。
コード
// interior_ptr_value_types_this.cpp
// compile with: /clr /LD
value struct V {
int data;
void f() {
interior_ptr<V> pv1 = this;
// V* pv2 = this; error
}
};
例: アドレス取得演算子
説明
次の例では、静的メンバーを持つ address-of 演算子を使用する方法を示します。
静的な Visual C++ 型のメンバーのアドレスは、ネイティブ ポインターを生成します。 静的な値型のメンバーのアドレスは、値型のメンバーがランタイム ヒープに割り当てられ、ガベージ コレクターによって移動される可能性があるため、マネージ ポインターになります。
コード
// interior_ptr_value_static.cpp
// compile with: /clr
using namespace System;
value struct V { int i; };
ref struct G {
static V v = {22};
static int i = 23;
static String^ pS = "hello";
};
int main() {
interior_ptr<int> p1 = &G::v.i;
Console::WriteLine(*p1);
interior_ptr<int> p2 = &G::i;
Console::WriteLine(*p2);
interior_ptr<String^> p3 = &G::pS;
Console::WriteLine(*p3);
}
22
23
hello
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示