随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

第五章 表达式


优先级
一元操作符优先级最高,其次是乘、除操作,接着是二元的加、减法操作。


自增自减操作符
只有在必要时才使用后置操作符
前置操作需要做的工作更少,只需要加1后返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。
对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。因此,养成使用前置操作
这个好习惯,就不必操心性能差异的问题。


使用sizeof的结果部分地依赖所涉及的类型:
l 对char类型或值为插入类型的表达式做sizeof操作保证得1.
l 对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小。

l 对指针sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向对象的大小,则必须对该指针进行解引用。
l 对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数。


new和delete表达式
int *pi=new int(1024);         //object to which pi points is 1024
   string s(10,'9');                    //value of s is '9999999999
   string *ps=new string;         //initialized to empty string
   int *pi=new int;                  //pi points to an initialized int

delete p;
执行语句后p变成没有定义。在很多机器上,尽管p没有定义,但仍然存放了它之前所指向对象的地址,然而p所指向的内存已经被释放,因此p不再有效。
删除指针后,该指针变成悬垂指针(dangling pointer)。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。悬垂指针往往导致程序错误,而且很
难检测出来。
一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚地声明指针不再指向任何对象。


下列三种常见的程序错误都与动态内存分配有关
(1) 删除指向动态分配内存的指针失败。因而无法将该块内存返还给自由存储区。删除动态分配内存失败称为"内存泄漏(memory leak)"。
(2) 读写已删除的对象。如果删除指针所指向的对象之后,将指针置为0值,则比较容易检测出这类错误。
(3) 对同一个内存空间使用两次delete表达式。

posted on 2009-08-11 21:07 八路 阅读(148) 评论(0)  编辑 收藏 引用 所属分类: C++primer 笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理