2013-10-03 152 views
1

我正在阅读教授给我的文档,我正在尝试了解以下代码行。需要帮助了解此操作

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

代码到底在干什么?新(p)完成后,C [3]是什么?

+0

查看安置新操作员:http://www.parashift.com/c++-faq/placement-new.html –

回答

1

这行代码构造的3项C类型,与此类似,这是希望对你更熟悉的数组:

C *r = new C[3]; 

的主要区别在于,new(p)不分配新的内存;相反,它会在p指向的预先存在的内存缓冲区中构建阵列。例如:

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

另一个区别是,你不能使用delete[]调用deconstructors和释放内存。你必须调用deconstructors手动

for (int i=0; i<3: i++) r->~C(); 
delete[] p; 

又见What uses are there for "placement new"?Wikipedia