在C++中,将基类的析构函数声明为虚函数(virtual)具有重要意义。这是因为当我们通过基类指针或引用删除派生类对象时,虚析构函数可以确保正确地调用派生类的析构函数。如果不使用虚析构函数,只有基类的析构函数会被调用,而派生类的析构函数将被忽略,可能导致资源泄漏和其他问题。
考虑以下情况:
class Base {
public:
~Base() { /* ... */ }
};
class Derived : public Base {
public:
~Derived() { /* ... */ }
};
int main() {
Base* ptr = new Derived();
delete ptr; // 仅调用Base的析构函数,不调用Derived的析构函数
return 0;
}
在这个例子中,ptr
是一个指向Derived
对象的Base
指针。当我们删除ptr
时,只有Base
类的析构函数会被调用。这可能导致Derived
类中分配的资源没有得到释放,从而导致内存泄漏。
为了解决这个问题,我们需要将基类的析构函数声明为虚函数:
class Base {
public:
virtual ~Base() { /* ... */ }
};
// Derived类保持不变
现在,当我们删除ptr
时,首先调用Derived
类的析构函数,然后调用Base
类的析构函数。这样可以确保Derived
类中分配的资源得到正确释放,避免内存泄漏。