当决定对象的结构时, 我们可以采取几种方法:

  • 继承Inheritance

  • 组合Composition: 子对象不能脱离父对象存在. 例如, 考虑若一个对象有一个owner<T>的成员, 当对象被删除时, 成员也被销毁

  • 聚合Aggregation: 对象可以包含其他的对象, 但是这些被包含的对象也可以独立存在. 比如一个对象的类型为T*shared_ptr<T>的成员

现在, 一般将Composition和Aggregation同样对待.