1. 三者的区别:
- association指的是一个对象持有另外一个对象的引用,如果互相持有的话称为双向association。
- aggregation是association的一种,表示这种关联是整体和部分的关系。
- composition是aggregation的一种,表示的是强aggregation的关系,表示部分是整体所专有的,不能与其他对象共享。一般情况下部分的生命周期由整体来控制。
2. 举例:
- 班级和老师是aggregation的关系;
- 班级和学生是composition的关系。
3. 线程安全:
- composition的线程安全很好保证,因为部分的生命周期由整体来决定,所以整体的析构函数会把部分也析构掉。从形式上看,部分是整体的直接成员或者是scoped_ptr的成员或者是整体所持有的容器的元素。
- association和aggregation很容易造成race condition,可能的解决方案包括:
- 对象池的方法,重复利用对象池中的对象,存在的问题包括:
- 对象池的线程安全问题。
- 全局共享变量引发的lock contention。
- 对象池的方法,重复利用对象池中的对象,存在的问题包括: