通常,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[]来释放
