不同对象实例之间的关系,特别是容器(包括复合对象)所包含的对象的客户代码之间的关系。
1.确定性生命周期
对于复合对象,如果允许外部直接访问其内部对象,那么在语义上就可以保证内部对象的生命期不会
超过其容器的生命期。直接访问是一种效率最高的方式。
如果在容器生命期结束后继续访问容器内部对象,将产生未定义行为。
特别提及:检出模型(Checkout Model)。这是确定性生命周期的一个变种。在请求资源时,如果成
功就返回一个token,使用完毕后,客户代码再checkin。这样可以实现对容器内对象的独占访问或者
共享访问。
2.返回拷贝
该方法将容器内对象复制一份给外部调用者,因此不影响容器内对象的生命期。
3.直接返回内部对象
这个币第一种要封装一层,但也是直接返回内部对象指针(or 引用),一般只用在元素占用大量资源的情况下。
4.共享对象
这是一种基于引用计数的方式,容器持有关于其内部元素的引用计数,并对外部访问,返回“被引用计数的”元素指针。