假设我有课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(使用前将#替换为@)