这应该被称为对象切片的某种特殊情况吗?

2024-05-23

假设我有课Derived派生自类Base然而sizeof(Derived) > sizeof(Base)。现在,如果分配一个数组Derived像这样:

Base * myArray = new Derived[42];

然后尝试访问n第一个对象使用

doSomethingWithBase(myArray[n]);

那么这可能(但并非总是)由于访问而导致未定义的行为Base来自无效位置。

这种编程错误的正确术语是什么?是否应将其视为以下情况对象切片 https://stackoverflow.com/questions/274626/what-is-object-slicing?


它根本不是切片,而是未定义的行为,因为您正在访问Derived不存在的对象(除非你很幸运并且大小对齐,在这种情况下它仍然是 UB,但无论如何可能会做一些有用的事情)。

这是指针算术失败的简单情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这应该被称为对象切片的某种特殊情况吗? 的相关文章

随机推荐