在拥有虚方法的类中,析构函数必须是虚的。这是因为只有在析构函数为虚函数时,删除动态分配的对象时,会调用正确的析构函数。如果析构函数不是虚函数,则在用作基类时,子类的析构函数将无法正确调用。因此,您需要将该类的析构函数声明为虚函数。
例如:
class Base {
public:
Base() {}
virtual ~Base() {}
virtual void foo() {}
};
class Derived : public Base {
public:
Derived() {}
void foo() override {}
};
int main() {
Base* b = new Derived();
delete b;
return 0;
}
在这里,我们将Base类的析构函数声明为虚拟函数。这将允许在被删除时调用正确的析构函数来释放Derived的内存。