在this question讨论了在编译器不支持 new 和放置 new 时创建工厂方法。显然,如果通过放置 new 完成的所有必要步骤都以某种方式重现,则可以使用 malloc() 制作一些合适的解决方案。
放置新有什么作用 - 我将尝试列出并希望不要遗漏任何内容 - 除了以下内容?
- 递归调用所有基类的构造函数
- 为所有成员变量调用构造函数和初始值设定项(如果有的话)
- 相应地设置 vtable 指针。
还有哪些 Action ?
最佳答案
Placement new
除了分配内存之外,它做了常规 new
会做的所有事情。
我认为您基本上已经确定了发生的事情,并做了一些小的说明:
- 显然类本身的构造函数也被调用
- vtable 指针作为构造函数调用的一部分进行初始化,而不是单独进行初始化。这意味着一个部分构造的对象(想想在构造函数中抛出的异常)将其 vtable 设置为构造进行到的点。
构造/初始化顺序如下:
- 声明顺序中的虚基类
- 声明顺序中的非虚基类
- 按申报顺序类(class)成员
- 类构造函数本身
关于c++ - C++ 中 placement new 执行的完整操作列表是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031543/