虚拟析构函数签名

virtual destructor signature

本文关键字:析构函数 虚拟      更新时间:2023-10-16

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

谁能解释一下虚拟机制(V-Ptr,V-Table)如何支持/使用不同名称的析构函数。

virtual析构函数的处理方式与虚函数不同。继承链中的所有析构函数都是在销毁对象时调用的,这与方法相反,在方法中,调用时仅调用派生最多的类中的重写。

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

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

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

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