内容へ移動
C++プログラマのためのC++/CLI入門
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
TOP
»
cli
»
pin_ptr
cli:pin_ptr
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
{{indexmenu_n>11}} ====== pin_ptr ====== pin_ptrはマネージヒープ上のvalue typeや基本型をC++のポインタで扱う機能です。 前章のサンプルで、set100(int* p)を変更したくない場合は、pin_ptrを使います。 <code cpp> ref class R { public: Object o; int i; }; void set100(int *i) { *i = 100; } int main() { R^ r = gcnew R; pin_ptr<int> p = &r->i; set100(p); p = nullptr; // unpin } </code> pin_ptrを使ってpinすると、インスタンスすべて(この場合R)がpinされます。pin_ptrはなるべく早くunpinした方がいいと思います。 pin_ptr関係で以下のようなコンパイルエラーが出ることがあります。 error C2664: 'set100' : cannot convert parameter 1 from 'cli::interior_ptr<Type>' to 'int *' エラーの出るソースは以下です。 <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); // ERROR } </code> r はマネージヒープ上に存在するため、ポインタに変換することができないためです。
/var/www/html/virtual/cppcli/data/pages/cli/pin_ptr.txt
· 最終更新: 2013/12/23 09:08 (外部編集)
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ