简介
- placement new 允许我们将 object 构建在一块已经分配的内存中
- 没有所谓的 placement delete, 因为 placement new 根本没分配内存
#include <new>
char* buf = new char[sizeof(Complex) * 3]; // 已经分配好的内存
Complex* pc = new(buf)Complex(1, 2);
...
delete []buf;
// Complex* pc = new(buf)Complex(1, 2);
// 以上代码会由编译器转为
Complex *pc;
try {
void* mem = operator new(sizeof(Complex), buf); // 在此处指定内存的位置
pc = static_cast<Complex*>(mem);
pc->Complex::Complex(1, 2);
}
catch (std::bad_alloc) {
// 内存分配失败,就不执行 ctor
}
// 源代码
void* operator new(size_t, void* loc) {return loc;} // 不分配内存