"Managed" (编译类型)
"Managed"::[t]
代表一个将自动内存管理添加到 t 的复合类型.
更多信息
- "Managed" 为类型添加内存管理,例如由外部库暴露的类型.
- t 不能是已拥有自动内存管理的状态.
- "Managed" 使用自动引用计数来自动释放不再使用的对象.
- 从编译代码返回的托管对象继续由 Wolfram Language 内核进行内存管理.
- 当作为参数传递给由 LibraryFunctionDeclaration 声明的函数时,托管对象会自动解包. »
函数构造
- CreateTypeInstance["Managed"::[t],obj,freeFunc] 构造一个包含 obj 的托管对象,该对象可在 "Managed" 对象释放时执行 freeFunc[obj]. freeFunc 必须有类型签名 {t}"Null".
- CreateTypeInstance["Managed"::[t],obj] 把 DeleteObject 作为 freeFunc 使用.
- 对于特定的 "Managed"::[t] 类型有许多构造函数,这些构造函数在编译类型 t 的页面上有记录. 例如,"Managed"::["CString"] 的构造函数用 "CString" 来记录.
属性
- 类型为 "Managed"::[t] 的 man 的 Information[man,"BaseType"] 给出 "TypeSpecifier"::[t].
- UnmanageObject 解除管理对象的包装并使其失效,取得被包装对象的所有权.
运行时错误
- 在用 UnmanageObject 解除管理后使用托管对象,可能会产生运行时错误.
InvalidManaged
范例
打开所有单元关闭所有单元基本范例 (2)
范围 (4)
可以用 UnmanageObject 来访问管理对象的内容:
使用 UnmanageObject 提取其内容:
UnmanageObject 会使托管对象失效,因此对 UnmanageObject 的后续调用会失败: