2016-09-22 62 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