关于纯虚析构函数的问题

7 c++ virtual-destructor

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

Jes*_*der 15

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


Rng*_*bus 9

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


Tob*_*ias 9

因为标准如此说:

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

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

另请参阅我之前问题的答案:在什么情况下提供纯虚函数的实现是有利的?