C++ 03 数组不支持多态?
2013-12-31 22:03
369 查看
01 自己的理解
刚看了下酷壳的那篇文章谈到C++多态不要和数组一起使用
01 Base *b = new Drived; 一切正常
由于C++将虚表指针放在了第一位 所以转型后不会出现虚表指针找不到的情况
02 Base *b = new Drived
; 问题来了
b[0]的时候没问题还是能找到 因为虚表指针在开始的位置
但是b[1]的时候问题出现了,b[0]-b[1]是偏移的大小为sizeof(struct Base) 实际上我们期望的是 sizeof(struct Drived)
这样由于内存偏移大小不符合我们的期望,自然b[1]和Drived
对应的第二个元素不对应。使得我们的操作未知。
内存布局示意图:
02 来自酷壳网的文章 解释的很清楚
原文:来自酷壳 http://coolshell.cn/articles/9543.html
C++多态不支持数组?
03 网友对 effictive C++ 第三条中 数组与多态问题文章
原文: http://blog.csdn.net/zhc/article/details/2708
刚看了下酷壳的那篇文章谈到C++多态不要和数组一起使用
01 Base *b = new Drived; 一切正常
由于C++将虚表指针放在了第一位 所以转型后不会出现虚表指针找不到的情况
02 Base *b = new Drived
; 问题来了
b[0]的时候没问题还是能找到 因为虚表指针在开始的位置
但是b[1]的时候问题出现了,b[0]-b[1]是偏移的大小为sizeof(struct Base) 实际上我们期望的是 sizeof(struct Drived)
这样由于内存偏移大小不符合我们的期望,自然b[1]和Drived
对应的第二个元素不对应。使得我们的操作未知。
内存布局示意图:
02 来自酷壳网的文章 解释的很清楚
原文:来自酷壳 http://coolshell.cn/articles/9543.html
C++多态不支持数组?
03 网友对 effictive C++ 第三条中 数组与多态问题文章
原文: http://blog.csdn.net/zhc/article/details/2708
More Effective C++ 条款3:不要使用多态性数组
相关文章推荐
- “C++的数组不支持多态”?
- “C++的数组不支持多态”?
- 从内存上解析c++中数组为什么不支持多态
- “C++的数组不支持多态”?
- C++的数组不支持多态”?
- "C++的数组不支持多态"? | | 酷 壳 - CoolShell
- “C++的数组不支持多态”?
- 读书笔记: effetive C++ 条款14:总是让base class拥有virtual desctructor , 体现了virtual对多态的支持
- C++ boost::bind 函数参数对数组、指针的支持不够好?欢迎指教
- More effective C++ 今日一贴 - 绝不要把多态应用与数组[3]
- 20140729 while((*pa++=*pb++)!='\0') 合并数组代码 C++类型转换关键字 封装 多态 继承
- C/C++到底支不支持定义不定长数组
- 读《More Effective C++35个改善编程与设计的有效方法》之条款3:绝对不要以多态方式处理数组
- C++学习笔记21 多态遇上对象数组
- C++中对多态的支持
- 《more effective c++》Item M3:不要对数组使用多态
- More Effective C++(条款三:绝对不要以多态方式处理数组)
- More Effective C++ 条款3 绝对不要以多态(polymorphically)方式处理数组
- C++支持的多态方式
- C++支持的多态方式