虚拟析构函数签名
virtual destructor signature
对于虚拟机制,我们需要在基类和派生类中具有相同的方法名称。但是,在虚拟析构函数的情况下,名称可以不同。
谁能解释一下虚拟机制(V-Ptr,V-Table)如何支持/使用不同名称的析构函数。
virtual
析构函数的处理方式与虚函数不同。继承链中的所有析构函数都是在销毁对象时调用的,这与方法相反,在方法中,调用时仅调用派生最多的类中的重写。
virtual
析构函数本质上与非虚拟析构函数相同,只是如果要通过指向基类的指针删除对象,它必须存在(否则它是未定义的行为)。
这取决于实现,只要它确保它可以调用正确的析构函数。这样做的方法可以是一般虚拟机制的一部分,也可以是仅用于析构函数的特殊机制。
人们会期望函数名称无论如何都不会出现在 vtables 中:编译器只是为每个类中的每个虚拟函数在表中分配一个偏移量。因此,析构函数是否有名称以及如果有,它们是什么的问题无关紧要。
一个类只能有一个析构函数,因此名称不必相同 - 您不必使用该名称来标识哪个析构函数,因为每个类只有一个析构函数。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- "虚拟""覆盖"析构函数
- 程序永远不会进入虚拟析构函数
- C++ std::vector 中的虚拟析构函数继承
- 哪种方法更适合处理虚拟析构函数?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 带有未解析外部元素的C++虚拟析构函数
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 从内部类的析构函数调用虚拟函数
- C++切片和虚拟析构函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 添加虚拟析构函数会使代码大小膨胀
- 应该是虚拟析构函数吗?但是怎么做呢?
- 虚拟析构函数将对象移出 rodata 部分
- 为什么虚拟类的析构函数不会自动添加到 vtable 中?
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- DIRECTX9 中自定义顶点的虚拟析构函数
- 声明析构函数虚拟就足够了吗?