在 C + + 类(或其任何父类)中至少有一个虚方法意味着该类将拥有一个虚表,并且每个实例都将拥有一个虚指针。
所以内存成本是显而易见的。最重要的是实例的内存开销(特别是如果实例很小,例如如果它们只包含一个整数: 在这种情况下,在每个实例中都有一个虚拟指针可能会使实例的大小增加一倍。至于虚拟表所占用的内存空间,我想与实际的方法代码所占用的空间相比,通常可以忽略不计。
这就引出了我的问题: 使方法虚拟化是否存在可衡量的性能成本(即速度影响) ?在运行时,在每次方法调用时,都会在虚拟表中进行查找,因此,如果对该方法的调用非常频繁,并且该方法非常短,那么可能会对性能造成可测量的影响?我想这取决于平台,但有人运行了一些基准测试吗?
我问这个问题的原因是,我碰巧遇到了一个 bug,这个 bug 是由于一个程序员忘记定义一个虚方法造成的。我不是第一次看到这种错误了。我想: 为什么我们 加的虚拟关键字需要时,而不是 removing的虚拟关键字,当我们绝对确信它是 没有的需要?如果性能成本较低,我想我会在我的团队中简单地推荐以下方法: 在每个类中默认使 每个方法为虚方法,包括析构函数,只有在需要时才删除它。你觉得这听起来很疯狂吗?