需要帮助了解此操作

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。

【讨论】:

以上是关于需要帮助了解此操作的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助了解此动态编程解决方案

需要帮助了解此Python列表语法

需要帮助了解为啥要从我的所有列表中删除数据

我需要帮助了解扩展初始化程序列表错误吗?

需要帮助了解我的 Android 应用程序中的内存泄漏

需要帮助识别位操作技术