2013-10-03 149 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