我有一个抽象的类,它定义了具体类的常见行为。因此,没有内存可以清理,因为类无法实例化。但是,我知道你需要一个虚拟析构函数,以便在它们的静态类型是Base类时调用派生的析构函数。
这是否意味着我应该总是为抽象类声明一个虚拟析构函数,但只是将实现留空?
答案 0 :(得分:2)
你必须提供类层次结构中每个析构函数的定义,因为派生类的所有析构函数都会在派生类被销毁时被调用,即使某些析构函数是微不足道的。 / p>
通常,您可以通过在基类中放置virtual ~Base() { }
(或其中一些例外指定的变体)来实现此目的。但是,如果析构函数是 only 虚拟成员函数,并且您想要使基本抽象,则可以使析构函数为纯虚拟,但您仍需要定义它:
struct Base
{
virtual ~Base() = 0;
};
Base::~Base() { }