简介

#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;}  // 不分配内存