gpt4 book ai didi

c++ - C++ 中 placement new 执行的完整操作列表是什么?

转载 作者:可可西里 更新时间:2023-11-01 18:27:46 27 4
gpt4 key购买 nike

this question讨论了在编译器不支持 new 和放置 new 时创建工厂方法。显然,如果通过放置 new 完成的所有必要步骤都以某种方式重现,则可以使用 malloc() 制作一些合适的解决方案。

放置有什么作用 - 我将尝试列出并希望不要遗漏任何内容 - 除了以下内容?

  • 递归调用所有基类的构造函数
  • 为所有成员变量调用构造函数和初始值设定项(如果有的话)
  • 相应地设置 vtable 指针。

还有哪些 Action ?

最佳答案

Placement new 除了分配内存之外,它做了常规 new 会做的所有事情。

我认为您基本上已经确定了发生的事情,并做了一些小的说明:

  • 显然类本身的构造函数也被调用
  • vtable 指针作为构造函数调用的一部分进行初始化,而不是单独进行初始化。这意味着一个部分构造的对象(想想在构造函数中抛出的异常)将其 vtable 设置为构造进行到的点。

构造/初始化顺序如下:

  1. 声明顺序中的虚基类
  2. 声明顺序中的非虚基类
  3. 按申报顺序类(class)成员
  4. 类构造函数本身

关于c++ - C++ 中 placement new 执行的完整操作列表是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com