通常,new负责在堆(heap)中找到一个足以能够满足要求的内存块。定位new运算符能够指定要使用的位置。
语法:
#include <new> //需要包含该头文件支持new定位运算符
struct chaff
{
char dross[20];
int slag;
}
char buffer1[50];
char buffer2[500];
int main()
{
char *p1, *p2;
int *p3, *p4;
p1 = new char; //在堆上申请内存
p3 = new int[20]; //在堆上申请内存
p2 = new (buffer1) chaff; //在buffer1上申请chaff结构大小的内存空间
p4 = new (buffer2) int[20]; //在buffer2上申请int[20]的空间
}
有两点需要说明:
- 定位new运算符分配的空间使用传入的地址开始分配
- 因为buffer1和buffer2是在栈上已经分配好的内存,所以对于p2和p4则不需要使用delete或者delete[]来释放