我正在阅读一位教授给我的文档,我正在尝试理解以下代码行。
C *r = new(p) C[3];
代码到底在做什么?new(p) 之后的 C[3] 完成了什么?
我正在阅读一位教授给我的文档,我正在尝试理解以下代码行。
C *r = new(p) C[3];
代码到底在做什么?new(p) 之后的 C[3] 完成了什么?
这行代码构造了一个包含 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;
另请参阅“放置新”有什么用途?和维基百科。