c++:父类的析构函数定义为纯虚函数注意事项
简介
在C++中,将基类的析构函数定义为纯虚函数是一种常见的做法,通常用于使基类成为抽象基类,从而不能直接实例化该基类。但需要注意的是,即使析构函数被声明为纯虚函数,我们也必须为其提供一个函数体(定义),否则在派生类析构时调用基类析构函数会导致链接错误。
原因:当派生类对象被析构时,会先调用派生类的析构函数,然后调用基类的析构函数。即使基类的析构函数是纯虚的,也需要有定义,因为派生类的析构函数隐式调用基类的析构函数。
示例
class Base {
public:// 纯虚析构函数,但需要在类外提供定义virtual ~Base() = 0;
};// 必须为纯虚析构函数提供定义
Base::~Base() {// 可以在这里提供一些清理代码,也可以为空
}
另一种常见做法是将析构函数声明为虚函数(但不一定是纯虚函数),以确保在多态删除对象时正确调用派生类的析构函数。如果希望基类是抽象的,但又没有其他合适的函数可以声明为纯虚函数,那么将析构函数声明为纯虚函数是一种方法。但是要注意必须提供定义。
步骤
在基类中声明纯虚析构函数:
virtual ~Base() = 0;