可能重复:
Under what circumstances is it advantageous to give an implementation of a pure virtual function?
Why do we need a pure virtual destructor in C++?
当Child class
具有纯Base
析构函数时,编译器不强制virtual
实现析构函数。
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
来定义析构函数体。 Which is understood。 (Demo供参考)
那么virtual
类中纯Base
析构函数的目的是什么? (它只是禁止Base
创建对象吗?)
答案 0 :(得分:27)
有时抽象基类没有虚拟方法(=通常称为“mixin”)或根本没有方法(=通常称为“类型标记”)
要强制将这些类用作抽象基类,至少有一个方法需要是纯虚拟的 - 但是类没有虚拟方法!因此我们将析构函数设为纯虚拟。
答案 1 :(得分:14)
它使类抽象化。至少存在一个纯虚方法足以使一个类成为抽象的。
答案 2 :(得分:3)
如果Base
中没有任何其他纯虚函数,则可以选择使析构函数为纯虚拟,以便基类仍然是抽象的。
实际上 强制派生类实现析构函数,但是如果你不提供析构函数,编译器会为你做这个。
好吧,也许我可以说得更好。第二段回复:
当
Child class
具有纯Base
析构函数时,编译器不强制virtual
实现析构函数。
我可能想说,虚拟析构函数(纯粹的或非纯粹的)会导致派生类也有一个虚拟的析构函数,无论你是编写还是编译器。
答案 3 :(得分:2)
编译器不强制Child类在何时实现析构函数 它的Base有纯虚析构函数。
不,编译器会为Child类生成一个默认的析构函数(如果你没有明确定义它,它会调用类Base的纯虚析构函数的实现)。