方法: 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 の非静的メンバー関数の本文で、thisinterior_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

関連項目

interior_ptr (C++/CLI)