我正在使用这样的多重继承:
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
的析构函数是否应该是虚拟的?一方面,所有其他析构函数都是虚拟的。另一方面,虚拟构造函数可能涉及一些成本,为什么不保存呢?
答案 0 :(得分:3)
一个好的重击规则就是让析构函数变为虚拟,直到找到一个不应该是虚拟的理由为止。这将有助于您避免将来出现错误,如果将来发现您因此受到了很大的性能损失,那么您可以轻松将其删除。