0

对于虚拟机制,我们需要在基类和派生类中具有相同的方法名称。然而,在虚拟析构函数的情况下,名称可以不同。

任何人都可以解释虚拟机制(V-Ptr,V-Table)如何支持/使用不同命名的析构函数。

4

3 回答 3

1

virtual析构函数的处理方式与虚函数不同。当一个对象被销毁时,继承链中的所有析构函数都会被调用,与方法相反,在调用时只调用最派生类中的覆盖。

virtual析构函数本质上与非虚拟析构函数相同,除了如果要通过指向基类的指针删除对象时它必须存在(否则它是未定义的行为)这一事实。

于 2012-10-09T09:41:57.327 回答
0

一个类只能有一个析构函数,因此名称不需要相同 - 您不必使用名称来标识哪个析构函数,因为每个类只有一个析构函数。

于 2012-10-09T09:41:14.243 回答
0

这取决于实现,只要它确保它可以调用正确的析构函数即可。这样做的方法可以是通用虚拟机制的一部分,也可以是仅用于析构函数的特殊机制。

人们会期望函数名称无论如何都不会出现在 vtables 中:编译器只是为每个类中的每个虚函数分配一个偏移量到表中。因此,析构函数是否有名称以及它们是什么的问题无关紧要。

于 2012-10-09T09:53:20.113 回答