我有 2 个类 Base 和 Derived(从 Base 公开派生)。
当我写下——
Derived * d1 = new Derived;
delete d1;
编译器认为 d1 是 Derived 类型对象。因此它调用派生类构造函数(派生类构造函数调用基类构造函数)。我这里有 2 个问题 -
1)为什么我们要遵循这个顺序?
2)这些构造函数如何协同工作来分配内存?我需要一些实施细节
现在下一条语句是删除 d1。因此编译器认为 d1 是派生类型对象,因此调用派生类的析构函数(在删除派生类成员后调用基类的析构函数)。我在这里有一个问题——
1)这些析构函数如何协同工作?假设派生类析构函数传递了内存中 d1 的地址。这些析构函数现在如何释放空间?
该代码将无法编译。你不能delete
自动实例,您必须使用new
分配实例以便使用delete
on it.
当谈到构造函数顺序时,我想运行它们是有意义的,以便更专业的类可以依赖于已经完成的更通用的部分。
编译器通过检查完整的类声明并向上递归任何和所有超类来了解每个类的内存布局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)