关于纯虚析构函数的问题

时间:2009-06-16 02:27:42

标签: c++ virtual-destructor

如果我们定义一个具有纯虚析构函数的抽象类,为什么我们必须在抽象类中给出析构函数的定义?

4 个答案:

答案 0 :(得分:15)

当对象被销毁时,必须调用基类的析构函数,因此需要定义。

答案 1 :(得分:9)

正如Jesse所指出的,继承的析构函数总是被调用(编译器会为它们调用它们而无法覆盖此行为),因此虚拟析构函数必须具有实现。因此,如果纯虚拟析构函数必须具有实现,那么纯虚拟析构函数和常规虚拟析构函数之间有什么区别?如果您的抽象类只声明了虚拟析构函数而没有其他纯虚方法,那么使析构函数变为纯将阻止某人实例化抽象类。

答案 2 :(得分:9)

因为标准是这样说的:

  

12.4.7 析构函数可以声明为虚拟(10.3)或纯虚拟(10.4);如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数。

这样做的原因是当派生类的对象被销毁时显式调用它。

另请参阅上一个问题的答案:Under what circumstances is it advantageous to give an implementation of a pure virtual function?

答案 3 :(得分:3)

只能将虚拟dtor声明为纯粹的。但是,由于您添加了声明,因此必须实现dtor的主体。如前所述,析构函数调用它们的父dtor,一直到继承链。