您的位置:首页 > 编程语言 > C语言/C++

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

More Effective C++ 条款3:不要使用多态性数组

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: