1

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

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

代码到底在做什么?new(p) 之后的 C[3] 完成了什么?

4

1 回答 1

1

这行代码构造了一个包含 3 项 type 的数组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;

另请参阅“放置新”有什么用途?维基百科

于 2013-10-03T12:23:46.010 回答