【发布时间】:2013-10-09 18:21:32
【问题描述】:
我正在阅读一位教授给我的文档,并试图理解以下代码行。
C *r = new(p) C[3];
代码到底在做什么? new(p) 之后的 C[3] 完成了什么?
【问题讨论】:
标签: pointers struct variable-assignment operator-keyword
我正在阅读一位教授给我的文档,并试图理解以下代码行。
C *r = new(p) C[3];
代码到底在做什么? new(p) 之后的 C[3] 完成了什么?
【问题讨论】:
标签: pointers struct variable-assignment operator-keyword
这行代码构造了一个C类型的3个元素的数组,类似这样,希望你更熟悉:
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;
【讨论】: