C++ 析构函数:虚拟还是非虚拟?

C++ 析构函数:虚拟还是非虚拟?,c++,inheritance,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的析构函数是虚拟的还是非虚拟的?一方面,所有其他析构函数都是虚拟的。另一方面,虚拟构造函数可能会带来一

我使用的多重继承如下:

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
的析构函数是虚拟的还是非虚拟的?一方面,所有其他析构函数都是虚拟的。另一方面,虚拟构造函数可能会带来一些成本,所以为什么不保存它呢?

一个很好的规则是使析构函数成为虚拟的,直到找到一个不应该是虚拟的好理由。这将有助于您避免将来出现bug,如果将来您发现由于它而导致性能大幅下降,那么您可以轻松地删除它。

因为节省实际上什么都没有