DDG*_*DDG 5 c++ abstract-class virtual-destructor
根据我在这里和 stackoverflow 上的其他链接上找到的内容,如果我们计划多态地使用它,我们应该始终在基类中定义一个虚拟析构函数。我想知道这个规则是否有例外。
我见过没有为纯抽象基类定义虚拟析构函数的生产代码,并且在 cppcon 2014 视频“不接受访客”之一中,大约 10:06 定义的 BoolExp 结构是一个纯抽象类,没有虚拟析构函数。
所以对于像这样定义的纯抽象类
class Base {
public:
virtual foo() = 0;
virtual bar() = 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们绝对必须为“基”类定义一个虚拟析构函数,即使它确实有任何数据成员?虚拟析构函数规则有任何例外吗?
提前致谢。
最好的,RG
我的问题是,我们绝对必须为“基”类定义一个虚拟析构函数,即使它确实有任何数据成员?
这取决于。如果你有这样的情况
base * foo = new child(stuff);
// doing stuff
delete foo;
Run Code Online (Sandbox Code Playgroud)
那么你绝对必须有一个虚拟析构函数。没有它,您将永远不会损坏该child部件。
如果你有这样的情况
child * foo = new child(stuff);
// doing stuff
delete foo;
Run Code Online (Sandbox Code Playgroud)
那么你不需要虚拟析构函数,因为child's 将被调用。
所以规则是如果你多态删除,你需要一个多态(虚拟)析构函数,如果没有,那么你不需要
| 归档时间: |
|
| 查看次数: |
3253 次 |
| 最近记录: |