拥有高类层次结构的运行时缺点是什么?
让我们调用H
层次结构的 height (即:遍历从基类到叶子的类的数量)。
dynamic_cast
费用更高:费用为O(H)
。
是否有其他操作员或语言功能受损?
答案 0 :(得分:3)
主要问题是可维护性。深层次结构可能未正确建模。超过3-4级的任何东西都应该让你收到警报。你可能来自具体的课程,你永远不应该做的事情(Liskov Substitution principle不允许这样做)。如果您的基类充满了virtual
函数(我的意思是不是纯粹),那么重构会很困难。
将基类拆分为几个不同的接口(Interface Segregation)。更喜欢继承的组合(软件设计的GoF fundamental rule)。
个人建议:尝试在没有dynamic_cast
的情况下进行编程。当我是C ++开发人员时,我能够在没有dynamic_cast
的情况下完全编程。我在适当的地方使用了设计模式,工厂,visitors等。没有演员表,生活更加简单: - )。
答案 1 :(得分:1)
所有操作都可以在O(1)时间内实现,通常它们都是dynamic_cast
除外。对于静态链接库,最后一个可以在O(1)时间内实现,请参阅here。
答案 2 :(得分:0)
叶类的对象的构造和销毁需要更长的时间,因为层次结构中的所有构造函数都被调用(从基类到叶类)。