定位new运算符,让你能够指定要使用的位置。
用法如下:
#include<iostream>
#include <new>
using namespace std;
char buffer[500];
int main()
{
int * p1, *p2;
p1 = new int[20];
p2 = new (buffer)int[20];
for (int i = 0; i < 20; i++)
{
p1[i] = p2[i] = i;
}
cout << "内存地址:\n" << "p1: " << p1 << endl;
cout << "p2地址: " << p2 << endl;
cout << "buffer地址: " << (void*)buffer << endl;
delete[]p1;
}
注意:
1.定位new运算符将数组p2放在了数组buffer中,两者的地址是一样的,然而它们的类型不同,p2int指针,buffer是char指针(需要(void*)进行转换)
2.定位new使用传递给它的地址,不跟踪哪些内存单元已被使用,也不查找未使用的内存块.
2.常规new将数组p1放在堆中,buffer指定的内存是静态内存,不能使用delete释放使用定位new运算符分配的内存.