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

iam*_*ind 19 c++ destructor pure-virtual language-lawyer

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

当编译器具有纯析构Child class函数时,编译器不强制实现析构函数.Basevirtual

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'
};
Run Code Online (Sandbox Code Playgroud)

有趣的是那个; 编译器而不是强制Base定义析构函数体.这是理解的.(演示供参考)

那么在课堂上拥有纯粹的析构函数目的是什么?(它只是禁止创建对象吗?)virtualBaseBase

Kon*_*lph 27

有时,抽象基类没有虚拟方法(通常称为"mixin")或根本没有方法(通常称为"类型标记").

要强制将这些类用作抽象基类,至少有一个方法需要是纯虚拟的 - 但这些类没有虚拟方法!所以我们使析构函数变为纯虚拟.


Luc*_*ore 14

它使类抽象化.至少纯虚方法的存在足以使类成为抽象的.