当前位置:  开发笔记 > 编程语言 > 正文

您不会用于删除对象的基类的析构函数是虚拟的吗?

如何解决《您不会用于删除对象的基类的析构函数是虚拟的吗?》经验,为你挑选了1个好方法。

说我有两个基类,

struct A {}; 
struct B {}; 

以及使用多重继承的派生类

struct D : A, B {}; 

如果我的使用场景是这样的:

A *obj = new D; 

即我永远不会使用B基类来引用派生对象,我是否必须使两个基础的析构函数虚拟?我目前正在申报的析构函数Bprotected禁止从这样其他用户,但是否足够?

析构函数怎么样D



1> Brian..:

B只要B*从不使用删除派生对象,析构函数就不必是虚拟的.见[expr.delete]/3:

...如果要删除的对象的静态类型与其动态类型不同,则静态类型应为要删除的对象的动态类型的基类,静态类型应具有虚拟析构函数或行为未定义.

在这种情况下,"静态类型"是类型T cv,其中操作数delete具有类型T cv *.因此,您的案件中的要求是强制性的A,而不是强制性的B.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有