在 C++ 中,通常情况下会将析构函数(Destructor)声明为虚函数(virtual destructor)的情况是在以下情况下:
基类带有虚函数时:如果一个类是多态的,即有一个或多个虚函数,那么通常情况下应该将析构函数声明为虚函数。这是为了确保在使用基类指针指向派生类对象时,通过基类指针删除对象时可以正确调用派生类的析构函数,从而避免内存泄漏。
使用基类指针或引用指向派生类对象:如果你使用基类指针或引用指向派生类对象,并且在运行时通过这些指针或引用来删除对象,那么基类的析构函数应当声明为虚函数,以确保正确调用派生类的析构函数。
示例代码如下:
class Base {
public:
virtual ~Base() { /* 析构函数定义 */ }
};
class Derived : public Base {
public:
~Derived() { /* 派生类析构函数定义 */ }
};
int main() {
Base* ptr = new Derived();
delete ptr; // 此时会调用 Derived 类的析构函数
return 0;
}
总的来说,如果你的类可能会作为基类使用,并且存在继承关系,那么将析构函数声明为虚函数是一个良好的实践,以确保正确的对象销毁顺序。