そのタイトルの意味を理解することは本当に難しいことですが、説明しようとします。Bオブジェクトへの参照を保持しているすべてのAオブジェクトにBオブジェクトが削除されたことを通知する
私たちは、name
,surname
、などのさまざまなフィールドを保持するクラスPerson
を持っています。これらは、任意の与えられたPerson
のユニークな特性です。ただし、Person
には、House
という別のオブジェクトを参照するフィールドがあります。一部の人々はそれを持っています。つまり、House
オブジェクト参照を意味します。他のものは、Null
オブジェクト参照を意味します(それについてはご注意ください)。もう1つは、同じ家に住んでいる人がいると仮定しているということです。異なる家から同じHouse
への複数の参照を意味します。Person
ここまでは順調ですね。
今、私たちは火のAsteroid
物体が空を飛んで来て、Person
オブジェクトの多くが住んで美しいマルチ階建てHouse
オブジェクトを、難破船状況にあります。 Asteroid
はこの建物へのオブジェクト参照をTown
で使用し、Null
に設定します。しかし、貧しい人々Person
オブジェクトはまだ彼らがHouse
を持っていると思う:House
の参照はTown
のレベルでのみ変更されたので、それはまだメモリ内にあり、すべての居住者はそれを参照しています。つまり、ガベージコレクタはHouse
オブジェクトを取り除くことができず、Person
オブジェクトは依然として疑似既存のHouse
を使用できます。
私は今考えている質問は明らかです。どのようにこのような状況に対処するべきですか?存在する場合しない場合、false
をtrue
を、そしてPerson
がかつて彼らのHouse
たクレーターに来るときそのようなオブジェクトはもう存在しないため、彼らは、Null
への参照を設定します。
は、私はいくつかのboolean
フラグを使用するのではと思いました。それは解決策を提供しますが、すべての居住者がHouse
が存在しないことを確認したわけではないので、ガベージコレクタはオブジェクトを取り除くことができません。
House
オブジェクトには、すべてPerson
オブジェクトが存在することが考えられます。 House
が破壊された後、すべての参照をNull
に設定し、配列全体を反復します。今ではガベージコレクタはオブジェクトを簡単に取り除きますが、これは高価になる可能性があります。超高層ビルの場合はどうなりますか?
他の可能性はありますか?
その場合、スタックから 'House'または' Person'までのオブジェクトパスは何ですか? –
私は家のオブジェクトの家に住んでいる人への参照が最高だと思うし、あなたは人にnull.Orに家を設定するか、または人と人をリンクするためにマップを使用することができます、人の中で –
マップpersonHouse>このように、あなたの2つのクラスは、それ自体では互いに疎結合ではありません –