C - 删除多态性指针

C++ - Deleting a polymorphic pointer

本文关键字:指针 多态性 删除      更新时间:2023-10-16
class A { int* a; };
class B : public A { int*b; };
int main() {
    A* ptr = new B();
    delete ptr;
}

class A是纯虚拟接口类,class Bclass A继承。当我们删除ptr时,将调用哪个驱动器?来自A类或B类的一个?

注释:首先,为什么在任何功能之外都有代码?陈述仅在功能主体内部时才有意义,例如main

假设您发布的语句应该进入main

答案: delete ptr将称为A的攻击函数A。

原因:所有方法(包括破坏者(默认情况下是非虚拟的。在您的情况下,您没有指定毁灭者应该是虚拟的。编译器看到您在A*指针上调用了灾难,因此它称为A的攻击器。


如果我指定了A级破坏者是虚拟的,该怎么办?它仍然会称呼A类的破坏者?

答案:如果是 virtual,它将称为 B的驱动器,因为在执行程序时将确定对象的实际类型。

此处查看有关虚拟功能和多态性的更多信息。