如果我们定义一个具有纯虚析构函数的抽象类,为什么我们必须在抽象类中定义析构函数?
user53670
问问题
9152 次
4 回答
15
基类的析构函数必须在对象被销毁时调用,所以它需要一个定义。
于 2009-06-16T02:31:39.043 回答
9
正如 Jesse 所指出的,继承的析构函数总是被调用(编译器会为你调用它们而无法覆盖此行为),因此虚拟析构函数必须具有实现是有道理的。那么如果纯虚析构函数必须有一个实现,那么纯虚析构函数和常规虚析构函数有什么区别呢?如果您的抽象类仅声明了虚拟析构函数而没有其他纯虚拟方法,则将析构函数设为纯将阻止某人实例化抽象类。
于 2009-06-16T02:47:57.723 回答
9
因为标准是这样说的:
12.4.7析构函数可以声明为虚拟(10.3)或纯虚拟(10.4);如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数。
这样做的原因是它在派生类的对象被销毁时被显式调用。
另请参阅我上一个问题的答案:在什么情况下提供纯虚函数的实现是有利的?
于 2009-06-16T08:28:09.553 回答
3
只有虚拟 dtor 可以声明为纯的。但是,由于您添加了声明,因此您必须实现 dtor 的主体。如前所述,析构函数调用它们的父 dtor,直到继承链。
于 2009-06-16T03:43:01.727 回答