虚函数表(vtable)是C++中实现动态多态的关键组成部分。当一个类包含至少一个虚函数时,编译器会为该类创建一个虚函数表。虚函数表中存储了指向类中虚函数的指针。每个对象实例都有一个指向虚函数表的指针(vptr)。
在析构函数中,虚函数表的应用主要体现在以下几个方面:
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
~Derived() override {}
};
int main() {
Base* ptr = new Derived();
delete ptr; // 调用Derived的析构函数,然后是Base的析构函数
return 0;
}
class Base {
public:
virtual ~Base() {} // 将析构函数声明为虚函数
};
class Derived : public Base {
public:
~Derived() override {}
};
int main() {
Base* ptr = new Derived();
delete ptr; // 调用Derived的析构函数,然后是Base的析构函数
return 0;
}
总之,虚函数表在析构函数中的应用主要是确保正确的析构顺序和避免父类析构函数被错误删除。为了实现这些目标,通常将基类的析构函数声明为虚函数。