我们不能创建抽象类的对象,那么为什么抽象类需要破坏?是否有必要为抽象类创建destruct pure virtual?
class Base()
{
public:
virtual ~Base() = 0;
};
Base :: ~Base()
{
}
class Derived :: public Base
{
public:
~Derived();
};
答案 0 :(得分:3)
我们不能制作抽象类的对象
这意味着抽象类不能自己实例化。但这并不意味着抽象类的对象不能被实例化为派生对象的一部分,但是:任何派生类的实例也是其抽象基类的实例。
这是析构函数的用武之地:如果你需要一个来释放在抽象类的构造函数中分配的私有资源,那么清理它的唯一地方就是它的析构函数。
是否有必要为抽象类制作destruct pure virtual?
没有必要将析构函数标记为纯虚拟。只有在没有定义可以标记为纯虚拟的其他功能时才能执行此操作。无论如何,必须为析构函数提供实现,即使您将其标记为纯虚拟。
答案 1 :(得分:0)
为什么抽象类需要破坏?
为了释放在整个类层次结构中使用的资源,它必须是虚拟的。还要使类成为抽象(见下文)
是否有必要为抽象制作破坏纯虚拟 类?
是的,只有在您想要使类抽象并且类内没有其他虚函数的罕见情况下。
关于Pure Virtual Destructor的附加说明