new负责在堆heap中找到一个足以满足要求的内存。new还有另外一种变体,被称为定位(placement) new 运算符,能够指定使用具体的内存位置。可以用这个特性来设置其内存管理章程,处理需要通过特定地址进行访问的硬件或在特定位置创建对象。
// C++ primer plus P320
#include<new>
struct chaff
{
char dross[20];
int slag;
};
char buffer1[50];
char buffer2[50];
int main()
{
chaff *p1,*p2;
int *p3,*p4;
p1 = new chaff;
p3 = new int;
// 定位new运算符
p2 = new (buffer1) chaff; // 指定使用需要使用的位置,
// 即为p2指向 buffer1的内存位置
p4 = new (buffer2) int[20];
}