F# - 需要明确删除ref cell吗?

时间:2016-09-22 12:36:35

标签: pointers f# heap delete-operator ref

ref cell是否像指针那样引用堆上的数据,需要明确删除?我在网上看到的所有例子都没有明确的删除电话。

2 个答案:

答案 0 :(得分:5)

你会如何明确删除它们?

另外,如果您查看source code,您会看到ref单元格类型只是可变字段上的不可变包装器,而:=!运算符是{ {3}}

您可以很容易地以类似的方式实现ref:

type Ref<'a> = { mutable value: 'a }
let (:=) (r: Ref<_>) v = r.value <- v
let (!) (r: Ref<_>) = r.value

答案 1 :(得分:3)

  

ref cell是否像指针那样引用堆上的数据,需要明确删除?

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

相反,当没有对它的引用时,引用单元将有资格进行垃圾收集。在此之后的某个时间,它将由GC自动清理。

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