在我的C ++应用程序中定义I Have Virtual Destructor基类是一个好习惯吗?

时间:2012-07-16 11:02:47

标签: c++

我想定义一个看起来像这样的类:

class IHaveVirtualDestructor
{
public:
    virtual ~IHaveVirtualDestructor();
};

我希望我的所有接口和抽象类都继承这个类。这是一个好习惯吗?或者每个接口/抽象类都应该定义自己的虚拟析构函数吗?有什么缺点?

4 个答案:

答案 0 :(得分:3)

  

我希望我的所有接口和抽象类都继承这个类。这是一个好习惯吗?

听起来不错。好处更像是noncopyable类。

从它们派生的任何类看起来只是通过快速一眼就能记录下来,否则必须查看析构函数的声明以确保析构函数是否为{{1或者没有。

制作默认构造函数virtual将是一个好主意:

protected

可能需要更好的名称:

  • AbstractBase
  • PolymorphicObject(摘自@James Kanze的回答)

答案 1 :(得分:3)

我不确定这是值得的,但如果我这样做,我会给这个类一个表达其目的的名称,而不是它的实现。类似于InterfacePolymorphicObject

答案 2 :(得分:3)

这取决于您是否认为忘记向类中添加虚拟析构函数或将IHaveVirtualDestructor添加为基类更加困难。

如果我害怕这样的错误,我倾向于使用静态代码分析器。

考虑班上的读者。必须查找IHaveVirtualDestructor。看到虚拟的,内联的和空的析构函数更加惯用。

亲切的问候 托

答案 3 :(得分:0)

如果基类析构函数被定义为virtual,则所有子类都将具有隐式虚拟析构函数。如果你将distructor定义为纯虚拟,如果它的目的是强制子类定义虚拟析构函数,那就更好了,