C - 删除多态性指针
C++ - Deleting a polymorphic pointer
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
的驱动器,因为在执行程序时将确定对象的实际类型。
此处查看有关虚拟功能和多态性的更多信息。
相关文章:
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 具有智能指针的多态性
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 如何调用指针类型的方法(禁用多态性)?
- 创建基类指针的向量并将派生类对象传递给它(多态性)
- 如何避免指针超出范围(多态性)的C++分段错误
- C++ 被此代码与多态性、指针和对象切片混淆
- 在同时处理基类的多个指针时如何处理多态性?
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- 与智能指针和矢量C 的多态性有关的问题
- C - 删除多态性指针
- 载体包含指向多态性类别的指针
- 集合中的智能指针多态性
- 多态性和STL容器.指针是不必要的
- 由支持多态性的值池存储,如何使用智能指针
- 如果我需要多态性,我应该使用原始指针而不是unique_ptr
- 没有指针的多态性
- 如何在使用动态多态性时避免指针
- 方法重写(没有虚拟方法或指针)是否被认为是多态性的一部分