组合
组合,意为其中一部分,不可分割,同生共死,因此涉及到生命周期管理。
场景1:非指针型成员变量
代码示例:
class A{
B b;
}
uml表示:
A *-- B
场景2:需要在类内回收的指针型成员变量(智能指针 或 需要delete的指针)
代码示例:
class A{
~A(){
delete pc;
pc=NULL;
}
std::shared_ptr<B> pb;
C* pc;
}
uml表示:
A *--> B
A *--> C
注:
场景1和场景2都是组合关系,只不过一种是成员变量,另一种是指针类型的成员变量,为了能够方便区分,建议把指针类型的成员变量带上箭头,非指针类型的不使用箭头,这样有助于区分成员的创建时机,非指针类型是作为成员在初始化的时候就创建的,优先于宿主的构造函数。
聚合
聚合,意为聚集在一起,相互之间是合作关系,不会存在生命周期牵连。
场景1:不需要在类内回收的指针型成员变量(纯指针,且不会delete)
代码示例:
class A{
B* pb;
func(C* c){
c->cfunc();
}
}
uml表示:
A o--> B
A o--> C