带了虚方法,析构函数就一定要virtual吗

 我来答
8826055
推荐于2016-01-15 · TA获得超过7510个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:907万
展开全部

析构函数不一定要virtual,但是建议virtual,原因如下:
子类的方法可能会覆盖基类的方法,而基类的指针/引用可能指向/绑定子类的对象,因此有时候无法单从编译时的类型来判断对象究竟是哪种类型。虚方法的作用在于调用该方法时能确保识别对象究竟是哪种类型。比如假设B是A的子类,则以下语句

B b;
A *a = &b;
a->foo();

如果foo不是虚方法,调用的是的A类的foo();如果foo是虚方法,调用的是B类的foo()。

因此带了虚方法说明子类可能会重写这个方法,而在重写的方法里可能会在静态存储区创建对象(比如new),需要调用重写的析构函数来释放这些对象,因此最好将析构函数设为虚方法。

城南明月羿当年
2015-06-06 · 知道合伙人生活技巧行家
城南明月羿当年
知道合伙人生活技巧行家
采纳数:24666 获赞数:123230
计算机爱好者

向TA提问 私信TA
展开全部
只有需要删除堆中生成的对象时,才必须使用析构函数。什么时候需要使用虚析构函数:1当用基类的指针指向子类对象,此时如果只是调用析构函数就只会执行基类的析构函数而不执行子类的析构函数。此时就要用到虚析构函数。因为虚析构函数可以动态绑定到子类对象。从而正确地析构。2子类使用了虚析构函数,那么父类也要用虚析构函数。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式