需要帮助了解此操作
Posted
技术标签:
【中文标题】需要帮助了解此操作【英文标题】:Need help understanding this operation 【发布时间】:2013-10-09 18:21:32 【问题描述】:我正在阅读一位教授给我的文档,并试图理解以下代码行。
C *r = new(p) C[3];
代码到底在做什么? new(p) 之后的 C[3] 完成了什么?
【问题讨论】:
查看安置新操作员:parashift.com/c++-faq/placement-new.html 【参考方案1】:这行代码构造了一个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;
另请参阅 What uses are there for "placement new"? 和 Wikipedia。
【讨论】:
以上是关于需要帮助了解此操作的主要内容,如果未能解决你的问题,请参考以下文章