C++编程技巧:多态和数组不能结合使用

142 2025-10-07 19:49

C++数组在内存中的布局与指针计算的机制,与多态存在根本冲突,不能同时使用。

数组在内存中是连续的,通过指针计算找到对应下标的成员:

一、多态与数组结合的灾难

当我们尝试将多态与数组结合,便会出现以下问题:

在循环里,「array」被认为是「Base 」类型的,所以实际的地址计算是「array + i * sizeof(Base)」。

但是我们通过多态传入了一个「Derived」类型的数组,显然「sizeof(Base)」和「sizeof(Derived)」的大小并不一样。最终循环会访问到「Derived」对象的内部地址,导致不可预测的错误。

二、删除多态数组的错误

看下面的代码:

「delete[]」的内部操作是循环调用数组对象的析构函数:

没错,「myArray[i]」这个指针计算操作又出现了,结果自然也是导致不可预测的错误。

下一篇:17万买准新大众CC,颜值够高,动力够用,空间一般
上一篇:回收功率模块
推荐资讯