は、彼らは、ヒープ上のデータを参照し、明示的に削除する必要があるという意味でのポインタのように参照セルはありますか?私がオンラインで見たすべての例には明示的な削除呼び出しはありません。のF# - REF細胞は、明示的に削除する必要がありますか?
4
A
答えて
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
関連する問題
- 1. 静的ベクトルは削除する必要がありますか?
- 2. リファクタリング時にF#の注釈を削除する必要がありますか?
- 3. カスタムフォーマットのオブジェクトをクリップボードから明示的に削除する必要がありますか?
- 4. 明示的にRESULT_CANCELEDに設定する必要がありますか?
- 5. なぜ明示的にスレッドに参加する必要がありますか?
- 6. F#でジェネリックの使用上のクエリ、特に新しいT()とref細胞
- 7. clSetEventCallback、明示的にイベントを保持する必要がありますか?
- 8. 明示的に関数をバインドする必要がありますか?
- 9. パフォーマンスのためにBlockingQueue.take()でスレッドを明示的にスリープ解除する必要がありますか?
- 10. オブジェクトリテラル - 別のキーを明示的に指定する必要があります
- 11. Shortオブジェクトを明示的に作成する必要はありませんか?
- 12. 細胞内の細胞を単一細胞に変換する
- 13. ウェブサイトからプリローダーを削除する必要があります
- 14. 仮想インデックスを削除する必要がありますか?
- 15. ラムダを削除する必要がありますか?
- 16. Elasticsearchエイリアスを削除する必要がありますか?
- 17. System.Windows.Media.Penを削除する必要がありますか?
- 18. イベントハンドラを削除する必要がありますか?
- 19. GLSurfaceViewでテクスチャを削除する必要がありますか?
- 20. CameraCaptureUIからStorageFileを削除する必要があります
- 21. QUpdSocketsを削除する必要がありますか?
- 22. OOP - 投稿を削除する必要がありますか?
- 23. すぐに削除する必要があります
- 24. 不要なスペースエレメントを削除する必要があります
- 25. インターフェイスメンバーを明示的にまたは暗黙的に実装する必要がありますか?
- 26. エラー注釈プロセッサを明示的に宣言する必要があります
- 27. DataTableを明示的に処理する必要があります
- 28. 'fb:app_id'プロパティを明示的に指定する必要があります。
- 29. mysqlで明示的にDROP VIEWを行う必要がありますか?
- 30. 子コンテキストを削除する必要はありますか?
など労働組合、クラスを判別します。あなたは何も "削除"する必要はありません。 –
...しかし、時にはあなたは、ファイルや接続などのリソースを配置したいです。しかし、純粋なメモリリソースであるrefセルの場合はそうではありません。 – FuleSnabel