【发布时间】:2017-06-02 05:19:22
【问题描述】:
假设我有两个基类,
struct A {};
struct B {};
以及使用多重继承
的派生类struct D : A, B {};
如果我的使用场景是这样的:
A *obj = new D;
即我永远不会使用B 基类来引用派生对象,我是否必须将两个基的析构函数设为虚拟?我目前将B 的析构函数声明为protected 以禁止其他用户这样做,但这是否足够?
D 的析构函数呢?
【问题讨论】:
-
不,但你应该这样做。
-
如果您永远不会将
D称为B,您可能会对protectedorprivateinheritance. 感兴趣 -
引用强大的 Scott Meyers 的话:...在一个类中声明一个虚拟析构函数当且仅当该类包含至少一个虚函数。
-
@RawN 另一方面,Herb Sutter 说:“基类析构函数应该是公共的和虚拟的,或者受保护的和非虚拟的。”
-
@Brian 所以,当你结合经验法则时:如果基类具有虚函数,则将析构函数设为公共且虚拟,否则将析构函数设为受保护且非虚拟。
标签: c++ destructor multiple-inheritance protected virtual-destructor