4
private class Node
{
    Item name;
    Node next;

    public void deleteObject()
    {
        this = null;
    }
}

クラス内のオブジェクトを削除することは可能ですか?上記を実行しようとしていますが、左側が変数である必要があるというエラーが発生します。 Nodeインナークラスです。ありがとうございました。

編集: var1そしてvar2このクラスのオブジェクトへの参照があります。を実行して削除するとvar1var1 = nullそれvar2も削除されます。

4

3 に答える 3

9

いいえ、それは不可能です。どちらも必要ありません。

オブジェクトは、ルートオブジェクトの1つから到達できなくなるとすぐに、ガベージコレクションの対象になります(事実上割り当てが解除されます)。基本的に、自己参照は重要ではありません。

使用しないオブジェクトへの参照を保存しないように注意してください。残りはガベージコレクターによって処理されます。

あなたの編集について:

編集: var1とvar2はこのクラスのオブジェクトを参照しています。var1= nullを実行してvar1を削除すると、var2も削除されるようにしたいと思います。

別のオブジェクトにその参照を強制的に削除させることはできません。他のオブジェクトにそうするように明示的に指示する必要があります。たとえば、リンクリストを実装している場合(例のように)、prev参照を追加して次のようにすることをお勧めします。

if (prev != null)
    prev.setNext(next);  // make prev discard its reference to me (this).

if (next != null)
    next.setPrev(prev);  // make next discard its reference to me (this).
于 2012-08-23T10:52:59.840 に答える
0

thisいいえ、同じクラスのオブジェクトを削除したり、ガベージコレクションのマークを付けたりすることはできません。

またthis、変数ではないため、式の左側にキーワードを含めることはできないため、コンパイラエラーが発生します。

于 2012-08-23T10:53:11.280 に答える
0

できません。「NodeManager」のようなものでノードを収集する必要があります。そうすれば、この「マネージャー」からノードを削除できます。

たとえば、ノードのリストを作成する場合。リストからノードを削除できます。明らかに、リストには最初のノードと一連のメソッドが含まれ、それらの間にdeleteNodeがあります。

LinkedListを参照してください

于 2012-08-23T10:54:29.583 に答える