我想定义一个看起来像这样的类:
class IHaveVirtualDestructor
{
public:
virtual ~IHaveVirtualDestructor();
};
我希望我的所有接口和抽象类都继承这个类。这是一个好习惯吗?或者每个接口/抽象类都应该定义自己的虚拟析构函数吗?有什么缺点?
答案 0 :(得分:3)
我希望我的所有接口和抽象类都继承这个类。这是一个好习惯吗?
听起来不错。好处更像是noncopyable
类。
从它们派生的任何类看起来只是通过快速一眼就能记录下来,否则必须查看析构函数的声明以确保析构函数是否为{{1或者没有。
制作默认构造函数virtual
将是一个好主意:
protected
可能需要更好的名称:
答案 1 :(得分:3)
我不确定这是值得的,但如果我这样做,我会给这个类一个表达其目的的名称,而不是它的实现。类似于Interface
或PolymorphicObject
。
答案 2 :(得分:3)
这取决于您是否认为忘记向类中添加虚拟析构函数或将IHaveVirtualDestructor添加为基类更加困难。
如果我害怕这样的错误,我倾向于使用静态代码分析器。
考虑班上的读者。必须查找IHaveVirtualDestructor。看到虚拟的,内联的和空的析构函数更加惯用。
亲切的问候 托
答案 3 :(得分:0)
如果基类析构函数被定义为virtual,则所有子类都将具有隐式虚拟析构函数。如果你将distructor定义为纯虚拟,如果它的目的是强制子类定义虚拟析构函数,那就更好了,