Lor*_*ins 2 c++ destructor protected multiple-inheritance virtual-destructor
说我有两个基类,
struct A {}; 
struct B {}; 
Run Code Online (Sandbox Code Playgroud)
以及使用多重继承的派生类
struct D : A, B {}; 
Run Code Online (Sandbox Code Playgroud)
如果我的使用场景是这样的:
A *obj = new D; 
Run Code Online (Sandbox Code Playgroud)
即我永远不会使用B基类来引用派生对象,我是否必须使两个基础的析构函数虚拟?我目前正在申报的析构函数B为protected禁止从这样其他用户,但是否足够?
析构函数怎么样D?
B只要B*从不使用删除派生对象,析构函数就不必是虚拟的.见[expr.delete]/3:
...如果要删除的对象的静态类型与其动态类型不同,则静态类型应为要删除的对象的动态类型的基类,静态类型应具有虚拟析构函数或行为未定义.
在这种情况下,"静态类型"是类型T cv,其中操作数delete具有类型T cv *.因此,您的案件中的要求是强制性的A,而不是强制性的B.