假设我有一个类 Derived
,它派生自类 Base
而 sizeof(Derived) > sizeof(Base)
。现在,如果像这样分配一个 Derived
数组:
Base * myArray = new Derived[42];
然后尝试使用
访问第n
对象
doSomethingWithBase(myArray[n]);
那么这可能(但并非总是)由于从无效位置访问 Base
导致未定义的行为。
这种编程错误的正确说法是什么? 是否应该将其视为 object slicing 的情况? ?
最佳答案
它根本不是切片,而是未定义的行为,因为您正在访问一个不存在的 Derived
对象(除非您很幸运并且尺寸对齐,在这种情况下它仍然是 UB但无论如何可能会做一些有用的事情)。
这是一个简单的指针运算失败的例子。
关于c++ - 这应该被称为对象切片的一些特殊情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051199/