访问容器中的元素
保留Array和一个指向T的指针之间的密切关系要付出一定的代价
- 用户能够轻易得到一个指向Array内部的指针,即使Array本身不存在了,这个指针仍被保留
- 不得不暴露类的内部机制,一旦内存变化肯定导致用户错误;resize之类的扩展有诸多潜在错误
增加防止出错的中间层
模拟指针
|
|
- 复制一个Pointer之后,原Pointer和其副本都指向一个位置
获取元素
- 最直接的方法会面临上述问题:
|
|
- 另一种解决方案会带来赋值不方便的新问题:
|
|
- 引进update操作
|
|
- 相应地,Array类使用update操作,但会带来无法实现包含Array的Array的功能的问题
|
|
方便性和安全性之间的权衡问题
选择何种方法取决于类会被确切地怎样使用
遗留问题
- 如果Array不存在了还可能存在一个指向它的空悬Pointer
“软件工程基本定理”(though it isn’t a real theory): 通过引进一个额外的中间层能够解决任何问题。’
|
|
指向const Array的Pointer
- 还无法使Pointer指向const Array的元素
- const Array的实际对象很少,但通过引用传递Array参数(const Array&)时还是有用的
定义独立的类,提供类型转换操作符给这个类,通过继承获得两种类型间的相似性
类Pointer从Ptr_to_const继承而来,即使对象不是const类型也能把指针保存在Array_data中
|
|
增强操作
- 重新设置Array大小
|
|
实现对Array的复制和赋值使包含Array的Array有效
不允许对Array_data对象复制,故不定义
operator=
调用Array_data::operator=
|
|
尚未完全消除指针的需求
《C++沉思录(Cplusplus Thinking)》笔记