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

jef*_*yer 26 c++ virtual-destructor

为什么C++默认情况下不会为至少有一个其他虚函数的类创建析构函数? 在这种情况下,添加一个虚拟析构函数不需要任何费用,并且没有一个(几乎?)总是一个bug.C++ 0x会解决这个问题吗?

Ker*_* SB 20

你不支付你不需要的东西.如果永远不会通过基指针删除,则可能不需要间接析构函数调用的开销.

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

如果您确实删除了一个基本指针并且该类具有虚拟方法,那么编译器会警告您,这是很好的.

编辑:让我在这里拉出Simon的优秀评论:查看关于为析构函数生成的代码的SO问题.正如您所看到的,还需要考虑代码膨胀开销.