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

条款三:绝对不要以多态的方式处理数组

2016-08-09 10:42 260 查看

条款三:绝对不要以多态的方式处理数组

1. 数组解析长度问题

  数组解析的方式是根据数组的数据类型取偏移量再取出对应地址的数据,就像(*(p+i)),这在利用数组下标等使用数组中数据时会产生很多麻烦

调用问题

  书上说,使用多态数组会因为数组指针步长的问题无法读取到相应的成员,但是在使用时这并不影响使用父类同样拥有的函数和数据。

person p1;
person p2;
man m1;
man p[3] = {p1,m1,p2};
p[1].fun();


 2. 删除问题

  因为数组的解析问题,在删除通过new的数组时,无法确定到具体的数据成员而失败。和1同理,原因貌似不是这个

2.函数调用问题

  在调用函数时,因为子类和父类同时拥有父类的函数和数据成员,所有用数组解析出来的对象使用父类的数据和函数不存在问题,但是当使用到子类的数据和成员时编译器会报错,此对象不存在该函数或该数据。

  特别是在调用析构函数时,会造成严重的内存泄漏问题。这个因该是上述delete[]p所造成的错误原因,而不是步长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 数组