2016-09-22 15 views
4

は、彼らは、ヒープ上のデータを参照し、明示的に削除する必要があるという意味でのポインタのように参照セルはありますか?私がオンラインで見たすべての例には明示的な削除呼び出しはありません。のF# - REF細胞は、明示的に削除する必要がありますか?

+6

など労働組合、クラスを判別します。あなたは何も "削除"する必要はありません。 –

+3

...しかし、時にはあなたは、ファイルや接続などのリソースを配置したいです。しかし、純粋なメモリリソースであるrefセルの場合はそうではありません。 – FuleSnabel

答えて

3

は、彼らは、ヒープ上のデータを参照し、明示的に削除する必要があるという意味でのポインタのように参照セルはありますか?

F#は、ガベージコレクタを介してメモリを自動的に管理するCLR上で動作します。メモリリソース、ヒープを使用してもものは、開発者からの明示的なクリーンアップを必要としない、そして実際には、あなたが明示的に特定のオブジェクトを削除することが可能なメカニズムはありません。

それへの参照がなくなったときに代わりに、参照セルは、ガベージコレクションの対象となります。それ以降は、GCによって自動的にクリーンアップされます。

これは、このような記録としてだけでなく、あなたがF#で生成するほとんどのタイプのために真である、CLRは、ガベージコレクション環境です

5

どのように明示的に削除しますか?あなたはsource codeを見てみる場合

また、あなたは、REF細胞型が変更可能なフィールドを超えるだけの不変のラッパーであり、:=!演算子はsimply getter/setter callsていることがわかります。

あなたは非常に簡単に同様の方法で自分自身をREFを実装することができます

type Ref<'a> = { mutable value: 'a } 
let (:=) (r: Ref<_>) v = r.value <- v 
let (!) (r: Ref<_>) = r.value 
関連する問題