虚拟析构函数性能

D_E*_*D_E 1 c++ performance

可能重复:
虚函数和性能 - C++

我有一些课:

class I
{
public:
  virtual void foo() = 0;
protected:
  virtual ~I(){}
};
Run Code Online (Sandbox Code Playgroud)

此类不提供实例删除的接口,因此使析构函数保护是非常合理的解决方案.因此,不必将析构函数设为虚拟.但我有代码,它是虚拟的.

它看起来不是一个大错误,但它对于代码性能是否显着?当我们创建虚拟功能时,我们将另外一条记录添加到虚拟功能表中,当我们进行虚拟呼叫时,我们在此表中搜索.所以这意味着查找时间会增加.我对吗?

Luc*_*ore 5

即使这是一个问题(它不是),不,它不会增加时间.查找不是运行时实际查找任何内容 - 无论vftable有多大都无关紧要.它确切知道在表中跳转的位置.

所以 - 调用virtual方法需要一些成本- 实际查找没有任何成本.