析构函数:虚拟的还是非虚拟的?

3

我正在使用多重继承,代码如下:

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 的析构函数是否应该被设为虚函数呢?一方面,在这里所有其他析构函数都是虚函数。另一方面,设为虚函数可能会有一些成本,那么为什么不节省这个成本呢?


因为节省的实际上微不足道。 - Ed Heal
1个回答

3

一个好的经验规则是使析构函数成为虚函数,直到你找到了它不应该是虚函数的好理由。这将帮助您在将来避免错误,如果在未来出现性能问题,那么您可以轻松地删除它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接