在C++中是否应该使用指针,何时使用指针
来源:互联网 发布:淘宝u站9.9包邮 编辑:程序博客网 时间:2024/09/21 08:17
http://bbs.csdn.net/topics/340133178
C++中,除了多态情形外,最好避免指针(个人建议),下面是各种情形的替代方式,简单又高效:
1、指针作为函数形参,用引用&代替
比如某个类的拷贝函数 bool classA_copy(classA *s1, const classA *s2);
可写作 bool classA_copy(classA &s1, const classA &s2);
这样在函数实现时书写更方便(反正我不习惯“->”)。
2、指针动态申请单个对象,用auto_ptr代替
常规的方式:classA *p; p = new classA(); ..... delete p;
要记住一定要写delete,不然会内存泄漏,如果这个指针p要反复申请新的变量,那么在申请之前也一定要delete一次。那么,程序可能要修改成这样:
classA *p=NULL; //一定要初始化
if(p) delete p; p = new classA(); //申请之前要检测是否需要释放
if(p) delete p; //在程序结束时,还要判断是否释放内存。
这样就有点让人写的不爽了,其实,用auto_ptr更简单:
auto_ptr<classA> p; //变量声明
p.reset(new classA()); //申请新的classA变量,会自动释放旧的classA变量(如果有的话)
//在函数结束时,auto_ptr会自动释放内存。
3、指针动态申请一维数组,用vector代替
指针用于申请单个变量已经比较麻烦了,申请多个变量时更麻烦,相信大家都有同感。
上面的auto_ptr方式只能用于申请单个变量,如果多个变量,就用vector代替吧。
关于vector的用法请查询相关C++教程。
4、指针动态申请多维数组,用boost::MultiArray代替
boost是C++的准标准库,里边实现了相当多的精巧技术,值得一看。MultiArray实现的是多维数组的功能。
当然,用vector<vector<classA>>来实现也是可以的,稍稍麻烦点而已。
5、函数指针,用boost::function代替
使用函数指针一般用来推迟一个调用或做一个回调。boost::function可以代替函数指针,允许用户在目标的实现上拥有更大的弹性。
如果需要多个回调,需考虑boost::signals,它提供了更强大的可控功能。
6、指针容器,用boost::pointer_container
熟悉stl标准算法的人都知道,vector、list、map等标准容器的元素都是深拷贝的。当元素复制的代价较大时,就应该考虑指针容器;此外,某些类是没有复制函数的(比如MFC的CSocket类),想用容器来管理多个元素,也应该使用指针容器。
指针容器,就是指容器中保存的是指向元素的指针。当然,也可以用vector<(classA *>来实现,但是要记住及时的删除内存,类似情形2。
boost::pointer_container实现了指针容器的功能,和stl容器的用法十分相似,还能够自动管理内存。
- 在C++中是否应该使用指针,何时使用指针
- C/C++何时使用引用和指针
- C中指针使用
- 应该在何时使用assert?
- 在c#中使用指针
- 在c#中使用指针
- C primer plus:在结构中使用指针,使用malloc分配指针空间以及free
- 在Swift中使用C语言的指针
- 在Swift中使用遗留的C API-指针篇
- C语言 如何在函数中使用指针?
- 何时应该使用struts?
- 指针在C与Delphi中的使用
- c语言中指针的使用场合
- c语言中指针的使用场合
- c语言中指针的使用【一】
- C语言中数组指针的使用
- 【C++】Vs2008中使用智能指针
- c中函数指针的使用
- 【LeetCode笔记】Longest Palindromic Substring
- swift 注意点
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- Debian系统Shiny server中文显示和服务自启动设置
- /*c语言,要求输入一个数字,统计其中偶数的个数,频率,最大最小等题目要求输入一个数字,然后统计其中的偶数的个数,最大的偶数和最小的偶数,以及最大偶数的发生频率*/
- 在C++中是否应该使用指针,何时使用指针
- UVA 128 - Software CRC (模运算+循环冗余校验码)
- Plan
- 随窗口大小变化的圆 /*向窗体拖放图片*/
- 删除桌面和启动中的快捷文件
- 软件开机启动设置
- 富文本编辑器合集
- 图片在div中垂直居中
- convert div into image