根据我在这里发现的内容以及stackoverflow上的其他链接,如果我们打算多态使用它,则应始终在基类中定义一个虚拟析构函数。我想知道这个规则是否有例外。
我见过没有为纯抽象基类定义虚拟析构函数的生产代码,并且在cppcon 2014视频之一“不接受访客”中,大约10:06定义的BoolExp结构是纯抽象类,没有虚拟析构函数。
所以对于这样定义的纯抽象类
class Base {
public:
virtual foo() = 0;
virtual bar() = 0;
}
我的问题是,即使它确实具有任何数据成员,也绝对必须为“ Base”类定义虚拟析构函数吗?虚拟析构函数规则是否有例外?
提前致谢。
最好,RG
我的问题是,即使它确实具有任何数据成员,也绝对必须为“ Base”类定义虚拟析构函数吗?
这取决于。如果你有这样的情况
base * foo = new child(stuff);
// doing stuff
delete foo;
那么您绝对必须拥有一个虚拟的析构函数。没有它,您将永远不会破坏child
零件。
如果你有这样的情况
child * foo = new child(stuff);
// doing stuff
delete foo;
然后,您将不需要虚拟析构函数,因为child
将调用。
因此,规则是,如果您删除多态,则需要一个多态(虚拟)析构函数,如果没有,则不需要
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句