需要帮助了解此操作

时间:2013-10-03 06:52:36

标签: pointers struct variable-assignment operator-keyword

我正在阅读一位教授给我的文件,我正在尝试理解以下代码。

  

C * r = new(p)C [3];

代码究竟在做什么?新(p)之后C [3]完成了什么?

1 个答案:

答案 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;

另请参阅What uses are there for "placement new"?Wikipedia