为什么默认情况下析构函数不是虚拟的[C]

默认情况下,为什么不为至少有一个其他虚拟函数的类为析构函数虚拟?在这种情况下,添加一个虚拟析构函数给我什么都没有,而没有一个是(几乎?)总是一个错误。将C 0x寻址到这个?
最佳答案
你不支付你不需要的东西。如果您不通过基本指针删除,则可能不需要间接析构函数调用的开销。

也许你在想,只有vtable的存在是唯一的开销。但是,每个单独的功能调度也必须被考虑,如果我想直接调用我的析构函数调用,我应该被允许这样做。

如果您删除了一个基本指针,该类有虚拟方法,那么您的编译器会很好的警告您。

编辑:让我拉西蒙在这里的优秀评论:查看this SO question关于为析构函数生成的代码。正如你所看到的,还有代码膨胀的开销被考虑。

转载注明原文:为什么默认情况下析构函数不是虚拟的[C] - 代码日志