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