ref cell是否像指针那样引用堆上的数据,需要明确删除?我在网上看到的所有例子都没有明确的删除电话。
答案 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#中生成的大多数类型也是如此,例如记录,有区别的联合,类等。