class A { int* a; };
class B : public A { int*b; };
int main() {
A* ptr = new B();
delete ptr;
}
class A
是纯虚拟接口类,class B
从class A
继承。当我们删除ptr
时,将调用哪个驱动器?来自A
类或B
类的一个?
注释:首先,为什么在任何功能之外都有代码?陈述仅在功能主体内部时才有意义,例如main
。
假设您发布的语句应该进入main
:
答案: delete ptr
将称为A的攻击函数A。
原因:所有方法(包括破坏者(默认情况下是非虚拟的。在您的情况下,您没有指定毁灭者应该是虚拟的。编译器看到您在A*
指针上调用了灾难,因此它称为A
的攻击器。
如果我指定了A级破坏者是虚拟的,该怎么办?它仍然会称呼A类的破坏者?
答案:如果是 virtual
,它将称为 B
的驱动器,因为在执行程序时将确定对象的实际类型。
此处查看有关虚拟功能和多态性的更多信息。