使用C++开发大型项目时,指针的管理是让人颇为头痛的一件事,也是隐藏在系统中的颗定时炸弹,轻则内存泄露,重则系统崩溃。而智能指针是帮助焦头烂额的C++程序员来管理指针资源的一把利器,其中强指针负责资源回收,而弱指针负责线程安全,配合默契,相得益彰。但是智能指针只有遵循一定的使用规范才能成为利器,没有规范的胡乱使用只会在代码中挖下一个又一个大坑。
笔者就经历过这样一个项目,由于并没有智能指针的使用规范,程序员又对智能指针不甚了解,再加上不同的技术水平和个人习惯,导致代码中强指针,弱指针,普通指针混杂、胡乱使用,内存泄露严重。指针判空上也是风格各异,不仅使代码看起来无组织纪律,很多也根本没有达到判空的效果。面对这样一堆代码,想要修改也工作量巨大,让人欲语泪先流。
本文以android中的智能指针为例,谈谈自己的看法。对android智能指针不清楚的同学可以翻看老罗的文章。
一、指针的初始化上
1. 原则上只使用智能指针,不用普通指针,风格更加统一
2. 强指针的使用范围:局部变量、子对象指针、可影响其生命周期的对象指针
该条即是利用强指针进行资源回收,不需要再人工计算new和delete,一个对象在何处(父类中或函数中)创建,就在何处(父类析构或函数结束)回收。
3. 弱指针的使用范围:父对象指针、某些不能影响其生命周期的对象