虚析构函数的作用
-
多态性下的正确析构:
当通过基类指针或引用删除派生类对象时,确保能够正确调用派生类和基类的析构函数。如果基类的析构函数不是虚的,删除一个指向派生类的基类指针时,只会调用基类的析构函数,而不会调用派生类的析构函数,这可能导致资源泄漏和未定义行为。
-
资源管理:
在基类中定义虚析构函数,确保在对象生命周期结束时,基类和派生类都能正确释放各自分配的资源(如动态分配的内存、文件句柄等),避免资源泄漏。
-
确保清理顺序:
虚析构函数确保在销毁对象时遵循正确的清理顺序。首先调用派生类的析构函数,然后调用基类的析构函数,确保在销毁派生类对象时,先清理派生类的资源,再清理基类的资源。
-
抽象类支持:
在抽象类(包含纯虚函数的类)中定义虚析构函数,即使该类不能被实例化,仍然可以确保派生类对象被销毁时能够调用基类的析构逻辑。
纯虚析构函数
当定义了一个纯虚函数后,这个类就变为抽象类,不能被实例化。即便是抽象类,编译器也要调用其析构函数,所以必须实现纯虚函数的定义,即有函数体。