抽象类对象和纯虚拟析构函数

时间:2018-01-24 11:04:28

标签: c++

我们不能创建抽象类的对象,那么为什么抽象类需要破坏?是否有必要为抽象类创建destruct pure virtual?

class Base()  
{  
public:  
    virtual ~Base() = 0;  
}; 
Base :: ~Base()
{
}
class Derived :: public Base  
{  
public:  
    ~Derived();  
};

2 个答案:

答案 0 :(得分:3)

  

我们不能制作抽象类的对象

这意味着抽象类不能自己实例化。但这并不意味着抽象类的对象不能被实例化为派生对象的一部分,但是:任何派生类的实例也是其抽象基类的实例。

这是析构函数的用武之地:如果你需要一个来释放在抽象类的构造函数中分配的私有资源,那么清理它的唯一地方就是它的析构函数。

  

是否有必要为抽象类制作destruct pure virtual?

没有必要将析构函数标记为纯虚拟。只有在没有定义可以标记为纯虚拟的其他功能时才能执行此操作。无论如何,必须为析构函数提供实现,即使您将其标记为纯虚拟。

答案 1 :(得分:0)

  

为什么抽象类需要破坏?

为了释放在整个类层次结构中使用的资源,它必须是虚拟的。还要使类成为抽象(见下文)

  

是否有必要为抽象制作破坏纯虚拟   类?

是的,只有在您想要使类抽象并且类内没有其他虚函数的罕见情况下。

关于Pure Virtual Destructor的附加说明

  1. 您必须在类外提供纯虚拟的定义 析构函数。
  2. 派生类不需要提供析构函数的定义。