この文書の現在のバージョンと選択したバージョンの差分を表示します。
cli:interior_ptr [2009/01/31 16:37] 192.168.0.73 |
cli:interior_ptr [2013/12/23 09:08] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== interior_ptr ====== | ||
- | |||
- | |||
- | interior_ptrはマネージヒープ上にあるvalue type、基本型を指すためのポインタです。 | ||
- | |||
- | 以下のコードを考えます。 | ||
- | <code cpp> | ||
- | ref class R | ||
- | { | ||
- | public: | ||
- | Object o; | ||
- | int i; | ||
- | }; | ||
- | void set100(int* i) | ||
- | { | ||
- | *i = 100; | ||
- | } | ||
- | int main() | ||
- | { | ||
- | R^ r = gcnew R; | ||
- | set100(&r->i); | ||
- | } | ||
- | </code> | ||
- | このコードはset100()でエラーになります。マネージヒープ上にあるものはポインタで受け取ることはできません。マネージヒープ上のデータはいつ場所が変わるかわからないため、純粋なアドレスを保持するポインタではまずいのです。 | ||
- | |||
- | そこで以下のようにして見ます。 | ||
- | <code cpp> | ||
- | ref class R | ||
- | { | ||
- | public: | ||
- | Object o; | ||
- | int i; | ||
- | }; | ||
- | void set100(int^ i) | ||
- | { | ||
- | i = 100; | ||
- | } | ||
- | int main() | ||
- | { | ||
- | R^ r = gcnew R; | ||
- | set100(r->i); | ||
- | } | ||
- | </code> |