【问题标题】:Need help understanding this operation需要帮助了解此操作
【发布时间】:2013-10-09 18:21:32
【问题描述】:

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

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

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

【问题讨论】:

标签: pointers struct variable-assignment operator-keyword


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2013-09-07
    • 2018-08-28
    • 2017-06-19
    • 2016-05-03
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多