带了虚方法,析构函数就一定要virtual吗
展开全部
析构函数不一定要virtual,但是建议virtual,原因如下:
子类的方法可能会覆盖基类的方法,而基类的指针/引用可能指向/绑定子类的对象,因此有时候无法单从编译时的类型来判断对象究竟是哪种类型。虚方法的作用在于调用该方法时能确保识别对象究竟是哪种类型。比如假设B是A的子类,则以下语句
B b;
A *a = &b;
a->foo();
如果foo不是虚方法,调用的是的A类的foo();如果foo是虚方法,调用的是B类的foo()。
因此带了虚方法说明子类可能会重写这个方法,而在重写的方法里可能会在静态存储区创建对象(比如new),需要调用重写的析构函数来释放这些对象,因此最好将析构函数设为虚方法。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询