C ++抽象类应该为(虚拟)析构函数提供实现吗?

时间:2013-09-29 18:23:08

标签: c++ memory-management polymorphism destructor virtual-destructor

我有一个抽象的类,它定义了具体类的常见行为。因此,没有内存可以清理,因为类无法实例化。但是,我知道你需要一个虚拟析构函数,以便在它们的静态类型是Base类时调用派生的析构函数。

这是否意味着我应该总是为抽象类声明一个虚拟析构函数,但只是将实现留空?

1 个答案:

答案 0 :(得分:2)

必须提供类层次结构中每个析构函数的定义,因为派生类的所有析构函数都会在派生类被销毁时被调用,即使某些析构函数是微不足道的。 / p>

通常,您可以通过在基类中放置virtual ~Base() { }(或其中一些例外指定的变体)来实现此目的。但是,如果析构函数是 only 虚拟成员函数,并且您想要使基本抽象,则可以使析构函数为纯虚拟,但您仍需要定义它:

struct Base
{
    virtual ~Base() = 0;
};

Base::~Base() { }