私は、 "閉じる"機能を持つストリームのようなクラスを持っています。このクラスのインスタンスは、フィールド/属性に格納されます。時々私はこのインスタンスを新鮮なインスタンスに置き換える必要があります。残念ながら、私は誰かがまだオブジェクトの古いインスタンスを使用しているかどうかを知ることはできません(多くの多くの関数がこのフィールドをマルチスレッドで使用しています)。クラスを閉じることなくフィールドを上書きすることができます。 GCが閉じられていないオブジェクトを削除することはありますか?それともdispose関数で閉じることができますか?ガベージコレクタによってストリームが閉じられているとは思いますか?
ありがとうございました。
OPのクラスでも、ストリームクラスと同様にClose()メソッドが公開されているわけではありません。 –
@Aaron - これはおそらく_can_と思っています'dispose'実装は終了を保証する必要があります。しかし、正しいことをするためにコードのユーザーに頼ることは面白いバグにつながります。 – Oded
残念ながら、それは廃棄パターンに必要なものです。GC以外にもメモリ以外のリソースを追跡するのではなく、コードのユーザーがクリーンアップを保証するために特別な手順( 'using'ステートメントなど)を取らせることを除いて、アンマネージドリソースがクリーンアップされることを保証する方法はありません。 – siride