测试代码:
void testViturlXiGou() {
class Base1 {
public:
virtual ~Base1() { // 声明为虚析构函数
cout << "Base1 析构" << endl;
}
};
class Sub1 : public Base1 {
public:
~Sub1() override { // 派生类析构函数
cout << "Sub1 析构" << endl;
}
};
class Base2 {
public:
~Base2() { // 非虚析构函数
cout << "Base2 析构" << endl;
}
};
class Sub2 : public Base2 {
public:
~Sub2() {
cout << "Sub2 析构" << endl;
}
};
Base1* b1 = new Sub1();
Base2* b2 = new Sub2();
delete b1;
cout << "========================================" << endl;
delete b2;
}
打印:
虚析构函数用于解决基类指针指向子类对象时的资源释放问题。保证正确的析构调用顺序。防止子类析构函数不调用导致内存泄露。