Pointers F#-是否需要明确删除ref单元格?

Pointers F#-是否需要明确删除ref单元格?,pointers,f#,heap,delete-operator,ref,Pointers,F#,Heap,Delete Operator,Ref,ref单元格是否像指针一样引用堆上的数据,需要显式删除?我在网上看到的所有示例都没有显式删除调用。如何显式删除它们 另外,如果您查看一下,您将看到ref单元格类型只是可变字段上的一个不可变包装器,:=和运算符为 您可以以类似的方式轻松实现ref: type Ref<'a> = { mutable value: 'a } let (:=) (r: Ref<_>) v = r.value <- v let (!) (r: Ref<_>) = r.value

ref单元格是否像指针一样引用堆上的数据,需要显式删除?我在网上看到的所有示例都没有显式删除调用。

如何显式删除它们

另外,如果您查看一下,您将看到ref单元格类型只是可变字段上的一个不可变包装器,
:=
运算符为

您可以以类似的方式轻松实现ref:

type Ref<'a> = { mutable value: 'a }
let (:=) (r: Ref<_>) v = r.value <- v
let (!) (r: Ref<_>) = r.value
type Ref
ref单元格是否像指针一样引用堆上的数据,需要显式删除

不,F#运行在CLR上,CLR通过垃圾收集器自动管理内存。内存资源,即使是使用堆的内存资源,也不需要开发人员进行显式清理,事实上,没有任何机制可以显式删除特定对象

相反,当引用单元格不再有引用时,它将有资格进行垃圾收集。之后的某个时候,它将被GC自动清理


对于在F#中生成的大多数类型也是如此,例如记录、有区别的联合、类等。

CLR是一个垃圾收集环境。你不需要“删除”任何东西。。。。但有时您喜欢处理文件和连接等资源。但对于作为纯内存资源的ref单元,情况并非如此。