通常,new负责在堆(heap)中找到一个足以能够满足要求的内存块。定位new运算符能够指定要使用的位置。

    语法:

    1. #include <new> //需要包含该头文件支持new定位运算符
    2. struct chaff
    3. {
    4. char dross[20];
    5. int slag;
    6. }
    7. char buffer1[50];
    8. char buffer2[500];
    9. int main()
    10. {
    11. char *p1, *p2;
    12. int *p3, *p4;
    13. p1 = new char; //在堆上申请内存
    14. p3 = new int[20]; //在堆上申请内存
    15. p2 = new (buffer1) chaff; //在buffer1上申请chaff结构大小的内存空间
    16. p4 = new (buffer2) int[20]; //在buffer2上申请int[20]的空间
    17. }

    有两点需要说明:

    1. 定位new运算符分配的空间使用传入的地址开始分配
    2. 因为buffer1和buffer2是在栈上已经分配好的内存,所以对于p2和p4则不需要使用delete或者delete[]来释放