析构函数:是否为虚拟

Destructor: virtual or not?

本文关键字:虚拟 是否 析构函数      更新时间:2023-10-16

我使用的是这样的多重继承:

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的析构函数是否应该成为虚拟的?一方面,所有其他的析构函数都是虚拟的。另一方面,虚拟构造函数可能会涉及一些成本,所以为什么不保存这些成本呢?

重击的一个好规则是使析构函数成为虚拟的,直到找到不应该是虚拟的充分理由。这将帮助您避免未来的错误,如果在未来,您发现自己的性能因此受到了很大的影响,那么您可以轻松地将其删除。