More Effective C++ 条款3 绝对不要以多态(polymorphically)方式处理数组
2015-06-25 23:04
525 查看
1. 对于数组作为参数的传递只有按引用传递或者传递首元素的地址,不存在按值传递。
2. 将派生类对象的数组传递给接受一个基类对象的数组作为参数的函数时,传递的实际上是首元素的地址,因而会造成“元素错位”现象,在此情况下,如果在函数中进行了指针的算数操作,将会导致灾难性的后果。
4. 比较隐蔽的指针算数操作:
array[i]:实际上代表*(array+i)
delete [] array:实现类似于以下代码
for(int i=the number of elements in the array - 1; i>0; --i)
array[i].~destructor();
由此可见operator[]也进行了指针的算术操作
5. 当数组内存的是对象而不是指针的时候,绝对不要以多态方式处理数组!(注:个人认为数组内存指针还是可以的)
2. 将派生类对象的数组传递给接受一个基类对象的数组作为参数的函数时,传递的实际上是首元素的地址,因而会造成“元素错位”现象,在此情况下,如果在函数中进行了指针的算数操作,将会导致灾难性的后果。
4. 比较隐蔽的指针算数操作:
array[i]:实际上代表*(array+i)
delete [] array:实现类似于以下代码
for(int i=the number of elements in the array - 1; i>0; --i)
array[i].~destructor();
由此可见operator[]也进行了指针的算术操作
5. 当数组内存的是对象而不是指针的时候,绝对不要以多态方式处理数组!(注:个人认为数组内存指针还是可以的)
相关文章推荐
- 【学习笔记】【C语言】返回指针的函数
- More Effective C++ 条款2 最好使用C++转型操作符
- C语言文件操作函数大全
- C语言控制用户输入的字符个数(curses.h代替conio.h)
- 程序编译是碰到的g++ 对c++11支持问题
- C语言标准
- C语言中,关键字static的作用
- c++ 输出虚函数表内容
- C语言:目标代码文件,可执行文件和库
- More Effective C++ 条款1 仔细区别pointers和references
- 自学笔记-C语言复习2015年6月25日
- C++编程思想学习笔记---第十章 名字控制
- 翻转二叉树(C++)
- C++/C宏定义中## 连接符与# 符的含义
- C++的常量
- C++文件操作详解(ifstream、ofstream、fstream)
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别
- C++实现顺序队列
- C++头文件定义规则
- C语言关键字