虚析构函数签名

时间:2012-10-09 09:37:27

标签: c++ virtual-destructor

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

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

3 个答案:

答案 0 :(得分:1)

virtual析构函数的处理方式与虚函数不同。 继承链中的所有析构函数在销毁对象时被调用,而不是方法,其中在调用时只调用派生程度最高的类中的覆盖。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这取决于实现,只要它确保它可以调用正确的析构函数。这样做的方法可能是一般虚拟机制的一部分,或者它可能是一个专门用于析构函数的机制。

可以预期,函数名称无论如何都不会出现在vtable中:编译器只为每个类中的每个虚函数分配一个偏移量。因此,析构函数是否具有名称,以及它们是否具有名称的问题是不相关的。