我对 C++ 和虚拟继承很好奇,特别是解决低音类和子类之间 vtable 冲突的方式。我不会假装了解它们如何工作的具体细节,但到目前为止我所看到的是,由于该分辨率,使用虚拟函数会导致一些小的延迟。我的问题是基类是否为空 - 即它的虚拟函数定义为:
virtual void doStuff() = 0;
这是否意味着该解析是不必要的,因为只有一组函数可供选择?
如果这是一个愚蠢的问题,请原谅我 - 正如我所说,我不明白 vtable 是如何工作的,所以我真的不知道更好。
EDIT
因此,如果我有一个带有两个独立子类的抽象类:
A
/ \
/ \
B C
与仅单个继承自由类相比,从子类调用函数时不会对性能造成影响?
打电话没有命中非虚拟的子类中的函数。如果您像示例中那样调用纯虚函数的重写版本,则虚拟惩罚可能仍然存在。一般来说,编译器很难优化虚拟表的使用,除非在非常特殊的情况下,它知道所讨论对象的确切按值类型(从上下文)。
但说实话,不用担心开销。它会非常少,以至于在实践中您几乎肯定不会遇到它是导致性能瓶颈的代码部分的情况。在对您的设计有意义的地方使用虚拟函数,并且不用担心(微小的)性能损失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)