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,如果将来您发现由于它而导致性能大幅下降,那么您可以轻松地删除它。因为节省实际上什么都没有