第一,
分配,你要求的内存预留,不同于初始化之前(执行基本上在该内存中设置合适值的构造函数),以及
形式(我们的神圣标准)和实践中的不同之处在于,对于大多数派生对象的内存是否需要是连续的,正式定义"内存区域"可能是非连续的,主要是为了支持多个虚拟继承.
也就是说,在实践中,最派生的对象是单个连续的内存块,其包括用于所有基类子对象和数据成员子对象的空间,并且该块必须一次全部分配.
初始化(构造函数的调用)在分配之后继续.一new
,如果初始化抛出一个异常失败,表达保证了释放.但是,如果所使用的分配函数具有额外的自定义参数(所谓的"placement new")并且没有相应的释放函数可用,则此保证无效,例如在Microsoft的MFC类框架的早期版本中进行调试构建的情况(这很讽刺:初始化失败的程序只会在调试版本中泄漏内存...).