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

use*_*591 2 c++ inheritance space

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

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

Che*_*Alf 5

第一,

  • 分配,你要求的内存预留,不同于初始化之前(执行基本上在该内存中设置合适值的构造函数),以及

  • 形式(我们的神圣标准)和实践中的不同之处在于,对于大多数派生对象的内存是否需要是连续的,正式定义"内存区域"可能是非连续的,主要是为了支持多个虚拟继承.

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

初始化(构造函数的调用)在分配之后继续.一new,如果初始化抛出一个异常失败,表达保证了释放.但是,如果所使用的分配函数具有额外的自定义参数(所谓的"placement new")并且没有相应的释放函数可用,则此保证无效,例如在Microsoft的MFC类框架的早期版本中进行调试构建的情况(这很讽刺:初始化失败的程序只会在调试版本中泄漏内存...).