{{indexmenu_n>11}} ====== pin_ptr ====== pin_ptrはマネージヒープ上のvalue typeや基本型をC++のポインタで扱う機能です。 前章のサンプルで、set100(int* p)を変更したくない場合は、pin_ptrを使います。 ref class R { public: Object o; int i; }; void set100(int *i) { *i = 100; } int main() { R^ r = gcnew R; pin_ptr p = &r->i; set100(p); p = nullptr; // unpin } pin_ptrを使ってpinすると、インスタンスすべて(この場合R)がpinされます。pin_ptrはなるべく早くunpinした方がいいと思います。 pin_ptr関係で以下のようなコンパイルエラーが出ることがあります。 error C2664: 'set100' : cannot convert parameter 1 from 'cli::interior_ptr' to 'int *' エラーの出るソースは以下です。 ref class R { public: Object o; int i; }; void set100(int *i) { *i = 100; } int main() { R^ r = gcnew R; set100(&r->i); // ERROR } r はマネージヒープ上に存在するため、ポインタに変換することができないためです。