组成
每一个指针都包含两部分:内存中的某处位置,以及如何解释该位置的内容。
内存中的位置:就是一个地址,常用16进制形式表示,指针本身只包含这个地址。
指针所指的内容:要使用该地址所存放的内容,即指针所指向的数据,就必须访问该地址,通过对应的指针类型来解释该位置的内存内容。同一组二进制数据,通过不同类型指针来解释,就对应不同的含义。
使用不当引起的错误
指针错误都产生于指针指向了它不该指向的位置。
内存破坏:通过一个坏了的指针变量赋值时,把数据写入了本不该写值的内存区域。
内存破坏的可能后果:1)导致可怕、严重的系统崩溃;2)篡改程序其他部分的计算结果;3)致使程序不可预知地跳过某些子程序;4)什么事情都不做(这种情况也很危险)。
正确使用指针的策略——双向策略(待进一步学习理解)
双向策略:1.避免指针错误;2.检测指针错误。
1.避免的技巧
- 集中控制的思想:将指针操作限制在子程序或者类里面
- 同时声明和定义指针
- 对称分配和释放:在与指针分配相同的作用域中删除指针
- 用额外的指针变量来提高代码清晰度
- 简化复杂的指针表达式
- 用图描述复杂的指针关系
- 按照正确的顺序删除链表中的指针
- 粉碎垃圾数据
- 删除或释放指针后将它们设为空值
- 尽量采用非指针的技术
2.检测的技巧
- 在使用指针之前检查指针(通过访问器子程序自动完成)
- 先检查指针所引用的变量再使用它(通过访问器子程序自动完成)
- 用狗牌字段来检测损毁的内存
- 增加明显的冗余
- 分配一片保留的内存后备区域
- 在删除变量之前检查非法指针
- 跟踪指针分配情况
- 编写覆盖子程序,集中实现避免指针问题的策略
C++指针(待进一步学习理解)
指针和引用的区别
把指针用于“按引用传递”参数,把const引用用于“按值传递”参数(没有拷贝代价的按值传递,不可更改引用的值)
auto_ptr(过去)和shared_ptr(现在)
灵活应用智能指针
[1]《CODE COMPLETE 代码大全2》 13.2
[2]《More Effective C++》“资源管理” “第28条”