"Managed" (コンパイルタイプ)
"Managed"::[t]
自動メモリ管理を t に加える複合型を表す.
詳細
- "Managed"は外部ライブラリによって見せられる型等にメモリ管理を加える.
- t はすでに自動メモリ管理を持っていることはない.
- "Managed"はもう使用されないオブジェクトを自動的に解放するために自動参照カウントを使う.
- コンパイルされたコードから返された管理されたオブジェクトは,引き続きWolfram言語カーネルによってメモリ管理される.
- 管理されたオブジェクトはLibraryFunctionDeclarationによって宣言された関数の引数として渡されるとき,自動的にアンラップされる. »
コンストラクタ
- CreateTypeInstance["Managed"::[t],obj,freeFunc]は obj を含む管理されたオブジェクトを構築する.これは"Managed"オブジェクトが解放されるときにfreeFunc[obj]を実行する.freeFunc の型シグネチャは{t}"Null"でなければならない.
- CreateTypeInstance["Managed"::[t],obj]は freeFunc としてDeleteObjectを使う.
- 特定の"Managed"::[t]型のコンストラクタは多数あり,コンパイル型 t のページに文書化されている.例えば,"Managed"::["CString"]のコンストラクタは"CString"で述べられている.
特性
- 型"Managed"::[t]の man のInformation[man,"BaseType"]は"TypeSpecifier"::[t]を与える.
- UnmanageObjectは管理されたオブジェクトをアンラップして無効化し,ラップされたオブジェクトの所有権を取る.
ランタイムエラー
- 管理されていたオブジェクトを,UnmanageObjectで管理されなくなった後に使うとランタイムエラーが生じることがある.
InvalidManaged
例題
すべて開くすべて閉じる例 (2)
スコープ (4)
管理されたオブジェクトはコンパイルされたコードでメモリ管理される:
管理されたオブジェクトのコンテンツにはUnmanageObjectでアクセスすることができる:
UnmanageObjectでコンテンツを抽出する:
UnmanageObjectは管理されたオブジェクトを無効にするので,その後のUnmanageObjectの呼出しは失敗する:
以前は管理されていなかった管理されたオブジェクトは自動的に解放されない.管理されたオブジェクトを作成し,管理されなくする関数をコンパイルする: