析构函数:虚拟与否?

时间:2014-04-27 09:19:12

标签: c++ inheritance

我正在使用这样的多重继承:

struct A {
    virtual ~A(){}
};

struct B {
    virtual void foo() = 0;
protected:
    ~B(){} // never called directly
};

struct C : public A, public B {
    virtual void foo(){};
};

B的析构函数是否应该是虚拟的?一方面,所有其他析构函数都是虚拟的。另一方面,虚拟构造函数可能涉及一些成本,为什么不保存呢?

1 个答案:

答案 0 :(得分:3)

一个好的重击规则就是让析构函数变为虚拟,直到找到一个不应该是虚拟的理由为止。这将有助于您避免将来出现错误,如果将来发现您因此受到了很大的性能损失,那么您可以轻松将其删除。