调用抽象类的析构函数
Calling abstract classes' destructors
我有三个类。
class Son : public Father;
class Father : public Grandfather;
Father
是抽象的,Grandfather
也是如此。Son
不是抽象的。
如果我这样做:
Son* son = new Son();
然后执行此操作:
delete(son)
我如何确保Father
和Grandfather
的破坏者称为?
父母类的破坏者无论是什么。
不过,您应该使顶级类的破坏者virtual
删除,因此您可以删除指向Grandfather
的指针,并确保所有子类的破坏者也被称为。不这样做会导致不确定的行为,这总是一件坏事。
函数是virtual
,它将是整个派生树的虚拟,无需在子类中标记它。但是,这样做通常是很好的形式,它可以帮助人们阅读代码。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 抽象类析构函数与继承"Shutdown"函数
- 为什么我不能使用已删除或私有析构函数分配类的数组?
- 显式默认析构函数禁用类中的默认移动构造函数
- 抽象类对象和纯虚拟析构函数
- 本地抽象类的纯虚拟析构函数
- 具有受保护析构函数的类数组的动态分配
- C++:具有成员的抽象类中的纯虚拟析构函数
- 不带名称、构造函数或析构函数的类
- 我可以从析构函数的类方法调用它吗
- 否,除非函数返回具有抛出析构函数的类
- 析构函数子类中的 c++ 分段错误
- 从没有虚拟析构函数的类继承
- 非平凡的析构函数使类具有非平凡的可构造性
- 是否应该初始化具有未重写的纯虚拟析构函数的类
- 为什么带有用户定义析构函数的类的实例将成员指针设置为零
- 为什么不能对带有析构函数的类进行忆及
- 为什么不为定义了析构函数的类合成move操作呢?
- 在析构函数中将类成员设置为空
- 在第三方软件中派生没有虚析构函数的类