纯虚拟析构函数的目的是什么

What is the purpose of pure virtual destructor?

本文关键字:是什么 析构函数 虚拟      更新时间:2023-10-16

可能的重复:
在什么情况下给出纯虚拟函数的实现是有利的
为什么我们需要C++中的纯虚拟析构函数?

Base具有纯virtual析构函数时,编译器不会强制Child class实现析构函数。

struct Base
{
  virtual void foo () = 0;
  virtual ~Base() = 0;
};
Base::~Base() {} // necessary
struct Child : Base
{
  void foo() {}
  //ok! no destructor needed to create objects of 'Child'
};

有趣的是;编译器强制Base定义析构函数体。这是可以理解的。(演示供参考(

那么在Base类中拥有virtual析构函数目的是什么?(这只是为了禁止Base创建对象吗?(

有时抽象基类没有虚拟方法(=通常称为"mixin"(或根本没有方法

要强制将这些类用作抽象基类,至少需要有一个方法是纯虚拟的,但类没有虚拟方法!因此,我们将析构函数改为纯虚拟的。

它使类变得抽象。至少存在一个纯虚拟方法就足以使类抽象。

如果Base中没有任何其他纯虚拟函数,则可以选择将析构函数设置为纯虚拟函数以使基类仍然是抽象的。

实际上,确实强制派生类实现析构函数,但如果不提供,编译器会帮你实现。


好吧,也许我可以用更好的措辞。第二段答复:

Base具有纯virtual析构函数时,编译器不会强制Child class实现析构函数。

我可能想说,虚拟析构函数(纯的或非纯的(会导致派生类也有一个虚拟析构因子,无论你是写它还是编译器写它。

当其Base具有纯虚拟析构函数。

不,编译器会为Child类生成一个默认的析构函数(它反过来调用基类的纯虚拟析构函数的实现(,以防您没有显式定义它。