我正在阅读一位教授给我的文件,我正在尝试理解以下代码。
C * r = new(p)C [3];
代码究竟在做什么?新(p)之后C [3]完成了什么?
答案 0 :(得分:1)
这行代码构造了一个由3个C
类型的项组成的数组,与此类似,希望您更熟悉:
C *r = new C[3];
主要区别在于new(p)
不分配新内存;相反,它在p
指向的预先存在的内存缓冲区中构造数组。例如:
char *p = new char[3*sizeof(C)];
C *r = new(p) C[3];
另一个区别是你不能使用delete[]
来调用解构器并释放内存。你必须手动调用解构器
for (int i=0; i<3: i++) r->~C();
delete[] p;