0

我有一个抽象的类,因为它定义了具体类的常见行为。因此,将没有要清理的内存,因为无法实例化该类。但是,我知道您需要一个虚拟析构函数才能调用派生析构函数(如果它们的静态类型是基类)。

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

4

1 回答 1

2

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

通常,您可以通过将virtual ~Base() { }(或某些异常指定的变体)放入基类中来实现此目的。然而,如果析构函数是唯一的虚成员函数并且你想使基类抽象,你可以使析构函数成为纯虚函数,但你仍然必须定义它:

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

Base::~Base() { }
于 2013-09-29T18:27:01.943 回答