c++ - 基类和派生类构造函数的内存分配

标签 c++ inheritance space

创建派生类对象时首先为哪一个分配空间?

是基类构造函数还是派生类构造函数?

最佳答案

首先

  • 分配,即您所询问的内存保留,不同于并先于初始化(执行构造函数,该构造函数本质上在那个内存),以及

  • 形式(我们的神圣标准)和实践在最派生对象的内存是否需要连续方面存在差异,形式将“内存区域”定义为可能是不连续的,主要是为了支持多重虚拟继承。

也就是说,实际上,最派生的对象是单个连续的内存块,其中包括所有基类子对象和数据成员子对象的空间,并且该 block 必须分配一次全部完成。

初始化(构造函数的调用)在分配后继续进行。如果初始化因抛出异常而失败,new 表达式可保证释放。然而,如果所使用的分配函数具有额外的自定义参数(所谓的“placement new”)并且没有相应的释放函数可用,则这种保证无效,例如用于微软 MFC 类框架早期版本中的调试构建(这非常讽刺:初始化失败的程序只会在调试构建中泄漏内存......)。

关于c++ - 基类和派生类构造函数的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064828/

相关文章:

c++ - 如何创建指向函数C++的指针的线程

c++自定义映射键/值不按顺序

c++ - C++ 是否有关键字允许从派生类引用基类型?

C++:如何使用静态常量变量指定数组长度?

c++ - QVariant 转换为 QPainterPath

c++ - 通过继承与对象引用的回调

c++ - 继承一个类,该类也继承与该类相同的基类

input - golang接受带空格的输入

CSS:菜单在 Firefox 中以正确的空格显示

ruby - 轨道模型 : validates_uniqueness_of doesn't remove trailing spaces not leading ones before unique check?