如果我们没有虚拟构造函数那么为什么我们有虚拟析构函数?构造函数也可以是虚拟的吗?
- 虚拟构造函数没有意义 - 你确切地声明了什么
类型被创建,并且在编译时是众所周知的。编译器
不需要[并且实际上不能,因为动态调度是基于
仅在创建对象后才创建的信息]。
所以没有虚拟构造函数.
- 虚拟析构函数对于防止内存泄漏很重要,并且
监控系统。假设你有
A* a = new B;
[B
继承
从A
],然后你delete a;
- 编译器没有办法
会心a
is a B
[在一般情况下],并将调用A
的
析构函数 - 如果它不是虚拟的,你可能会遇到内存泄漏,
或其他故障。
- 使用虚拟析构函数 - 你确保这件事
B
的析构函数是
调用,因为B
对象正在被销毁.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)