Effective C++ (5) 几个关于数组的问题
2009-02-25 10:22
471 查看
1.指针和数组容易产生不可预料的错误。其中一部分是概念上的问题:指针用于低级操作,容易产生与繁琐细节相关的(bookkeeping)错误。其他错误则源于使用指针的语法规则,特别是声明指针的语法。
许多有用的程序都可不使用数组或指针实现,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代C风格字符串。2.动态数组
动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化:
string *psa = new string[10]; // array of 10 empty strings int *pia = new int[10]; // array of 10 uninitialized ints
之所以要动态分配数组,往往是由于编译时并不知道数组的长度。我们可以编写如下代码
size_t n = get_size(); // get_size returns number of elements needed int* p = new int ; for (int* q = p; q != p + n; ++q) ;
动态数组的释放
动态分配的内存最后必须进行释放,否则,内存最终将会逐渐耗尽。如果不再需要使用动态创建的数组,程序员必须显式地将其占用的存储空间返还给程序的自由存储区。C++
语言为指针提供 delete [] 表达式释放指针所指向的数组空间:
delete [] pia;
3.尽量使用前置操作符++
有使用 C 语言背景的读者可能会觉得奇怪,为什么要在程序中使用前自增操作。道理很简单:因为前置操作需要做的工作更少,只需加 1
后返回加 1 后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加 1 之前的值作为操作的结果。对于
int
型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。
分享到新浪微博
相关文章推荐
- Effective C++ (5) 几个关于数组的问题
- 关于面试常见的一个数组中找出出现一次的几个数字的问题
- 几个关于C++的问题
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- 关于c/c++和java中数组整体赋值的问题
- 关于c++中正则表达式的几个问题
- C/C++面试题--数组作为函数参数的几个问题
- 6.24习题有感-关于C++传数组和返回数组的问题
- 在C/C++中关于局部数组问题(子函数等)
- 关于C和C++动态链接库的几个问题
- 关于C和C++动态链接库的几个问题
- 关于C++静态数组初始值的问题
- 关于C++中返回值是数组类型失败的问题
- C&C++关于数组的定义,引用传参问题
- 关于C和C++动态链接库的几个问题
- 【C++学习笔记】关于预处理器的几个问题
- 关于数组与字符串输入的问题-C++版 推荐
- C++.net中的常见问题一(关于数组)
- 2014年3月29日 遇到的关于opencv将图像转换为数组的几个问题 包含cvmat 到mat转换
- C语言:字符串、结构体中关于数组的几个问题