1.3.7 對象銷燬
C++,程序員顯式銷燬對象,delete
java/C#,由虛擬機自動完成,garbage collection
析構方法通常用於清理非託管資源,文件系統、數據庫連接、網絡
建議,在開發中不要重寫C#和Java的析構方法,應該讓CLR/JVM負責
在C#中,非要顯式回收資源,可以利用Disposable模式來解決這個問題(不用C#,此處略)
2.1.1 對象組合(對象關係中的一種)
1-to-1
方式一:A對象完全包含B對象,A創建B隨之創建,A銷燬B隨之銷燬(組合)
// 方式一,使用簡單
class OneToOneClass{
private InnerClass obj;
public OneToOneClass(){
obj = new InnerClass();
}
}
方式二:A對象與B對象相互獨立,A對象引用現成的B對象,A的聲明週期與B無關(聚合)
// 方式二,採用對象注入
class OneToOneClass{
private InnerClass obj;
public OneToOneClass(InnerClass outerObj){
this.obj = outerObj;
}
}
1-to-N,實現起來把上述private InnerClass obj變成對象的集合
方式一:一輛車有4個輪子
方式二:一個飛機場有多架飛機
經驗:活用對象組合,延時動態創建用戶界面創建複雜的窗體(多個容器後臺加載)
自引用類(對象組合的特殊形式)
// 用處:在沒有指針的面向對象編程語言中,可以替代指針建立數據之間的關聯
class MyClass{
MyClass obj;
}
// 比如,構成鏈表等數據結構