【发布时间】:2019-12-08 01:46:10
【问题描述】:
根据我发现的here 和stackoverflow 上的其他链接,如果我们打算以多态方式使用它,我们应该始终在基类中定义一个虚拟析构函数。我想知道这条规则是否有例外。
我已经看到没有为纯抽象基类定义虚拟析构函数的生产代码,并且在 cppcon 2014 视频Accept no visitor 之一中,大约 10:06 定义的 BoolExp 结构是纯抽象类并且没有虚拟析构函数。
所以对于这样定义的纯抽象类
class Base {
public:
virtual foo() = 0;
virtual bar() = 0;
}
我的问题是我们绝对必须为“Base”类定义一个虚拟析构函数,即使它确实有任何数据成员?虚拟析构函数规则是否有任何例外?
提前致谢。
最好, RG
【问题讨论】:
-
可以,但不推荐。如果对象的生命周期不是由指向基类的指针管理的,则不需要这样做,但无论如何我都会这样做。
-
如果要多态地删除,则需要一个虚拟析构函数。见stackoverflow.com/q/461203/10077
-
可能是为了节省空间而从幻灯片中删除。
-
嗯。一定是这样的。感谢您的帮助
标签: c++ abstract-class virtual-destructor