2016-09-22 29 views
4

引用的单元格就像指针,它们引用堆上的数据,并且需要被显式删除?我在网上看到的所有示例都没有显式的删除调用。F# - 是否需要显式删除引用单元格?

+6

CLR是一个垃圾回收环境。你不需要“删除”任何东西。 –

+3

...但有时候您喜欢配置文件和连接等资源。但对于ref cell来说,这不是纯粹的内存资源。 – FuleSnabel

回答

3

是裁判的细胞像它们所引用的堆数据的意义指针,并且需要显式删除?

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

相反,当有它不再引用的参考小区将变为符合垃圾收集。在此之后的某个时候,GC将自动清除它。

这是你在F#产生,以及大多数类型,如记录,识别联合,类等真

5

你会如何明确地删除它们?

此外,如果你看看在source code你会看到裁判细胞类型是仅仅过了可变领域的不可变的包装,以及:=!运营商simply getter/setter calls

您可以用类似的方式自己很轻松地实现裁判:

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