<分区>
请考虑以下代码:
Base b;
if (something)
b = DerivedA();
else
b = DerivedB();
众所周知,在这种情况下会发生“切片”:在 C++ 中,我们不能将基类型的变量分配给派生类型的对象;该对象将被“切片”掉基类型中未定义的任何内容。 (如果我们想做这样的事情,我们必须使用指针或引用)。
我想了解这个的实际原因。即,Base
变量在不切片的情况下无法保存 Derived
对象的原因。
我的假设是,这样做的原因是 Base
对象和 Derived
对象的大小可能不同,因此我们无法保证能够将整个 Derived
对象存储在 Base
变量中。 Base
可能占用 4 个字节,而 Derived
可能占用 7 个字节。因此,我们决定始终对派生对象进行切片以适应基本类型的大小。
我们能够用指针来做到这一点,因为它们都占用相同数量的内存。
这个假设是否正确?如果不是,切片的实际原因是什么?