Placement New
普通的new 操作符,假设有个类叫 class Foo
Foo *p = new Foo();
这行代码实际上干了两件事,首先分配一块内存,然后调用Foo的构造函数
但是有时候,我们已经有一块内存,不需要再分配,只需要调用构造函数,但是C++语法是不允许直接调用构造函数的
p->Foo::Foo(); // 编译错误error: cannot call constructor ‘Foo::Foo’ directly
那么想在已经存在的内存上构建对象,就要用到 Placement New,实际上就是帮你调用下构造函数
void *p = malloc(sizeof(Foo)); Foo *bar = new (p) Foo();
这个特性不能说绝对没用,但是极少会用到。