对象切片是否有用?

jro*_*rok 15 c++ inheritance object-slicing

当我们将派生类的对象分配或复制到其基类的对象时,会发生对象切片,从而在该过程中丢失它的派生部分.

这里有更深入的解释:C++中的切片问题是什么?.

(我自己,我不认为它是一个问题,而是语言价值语义的自然结果,但这不是这个问题的重点.)

我想知道的是:有没有你有意使用它的情况?这是一个"工作的正确工具"吗?

Ran*_*aul 7

当然,当想要删除类的派生部分时,它可能是有用的,可能是为了删除依赖项.

例如,假设我们有一个对象系统设置,其中每个基类都属于派生类型,并且每个派生类型都有各种依赖关系,可能通过依赖注入来实现.可能希望创建基本的克隆,但可能希望为该基础的实际派生类型分配一组全新的依赖项.

这可以比作游戏引擎,其中有许多类型的碰撞器.每个碰撞器以各种方式从类似基础接口的对象派生.我们想要克隆一个对撞机来检索它的位置和比例(从基础),但是想要在这个基础上放置一个完全不同的派生实现."对象切片"可能是实现这一目标的简单方法.

实际上,组件或聚合对象组织比具体的对象切片更有意义,但它大多是相同的想法.