一個代碼示例:對象的破壞時,子對象引用父對象
public class Parent{
public void someMethod(){
//start of some sort of loop
Child child = new Child(this);
//do something
//replaces reference from old child to new child
child = new Child(this);
//repeats loop
}
}
public class Child{
Parent parent;
public Child(Parent parent){
this.parent = parent;
}
}
從我的理解一個對象的生命週期,如果一個對象將被不再被引用,那麼這將是資格GC,比如當孩子的引用被改變爲引用一個新的第二個孩子對象時。
但是如果每個Child對象都有一個對創建它的對象的引用(如上所述),在這種情況下,一旦它不再被它的父對象引用,它有資格使用gc嗎?
如果不是,我該如何寫它,以便它?
哦,是的,我用這個新的父(),我編輯了一個錯字。但是,我將如何從子類刪除對父實例的引用?我應該做一個removeParent方法,並在裏面把家長參考爲空? – Imp 2014-09-30 05:16:36
在上面的例子中,Parent沒有引用Child;一個children變量是someMethod()方法內的局部變量。 – Marco 2014-09-30 05:22:52
@Nonexistent如果您有一個對Child實例的引用,並且在Child類中有一個使Parent引用無效的方法,則可以清除該引用。但是,如果您沒有對Child實例的引用,則無法執行此操作。 – Eran 2014-09-30 05:27:38