创建派生类对象时首先为哪一个分配空间?
是基类构造函数还是派生类构造函数?
最佳答案
首先
分配,即您所询问的内存保留,不同于并先于初始化(执行构造函数,该构造函数本质上在那个内存),以及
形式(我们的神圣标准)和实践在最派生对象的内存是否需要连续方面存在差异,形式将“内存区域”定义为可能是不连续的,主要是为了支持多重虚拟继承。
也就是说,实际上,最派生的对象是单个连续的内存块,其中包括所有基类子对象和数据成员子对象的空间,并且该 block 必须分配一次全部完成。
初始化(构造函数的调用)在分配后继续进行。如果初始化因抛出异常而失败,new
表达式可保证释放。然而,如果所使用的分配函数具有额外的自定义参数(所谓的“placement new”)并且没有相应的释放函数可用,则这种保证无效,例如用于微软 MFC 类框架早期版本中的调试构建(这非常讽刺:初始化失败的程序只会在调试构建中泄漏内存......)。
关于c++ - 基类和派生类构造函数的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064828/