新運算符是否保證分配連續的堆內存?即是C++新操作符 - 內存佈局
objects=new Base[1024];
在存儲器分配方面相同
objects=(Base*)malloc(1024*sizeof(base));
或能有間隙?
新運算符是否保證分配連續的堆內存?即是C++新操作符 - 內存佈局
objects=new Base[1024];
在存儲器分配方面相同
objects=(Base*)malloc(1024*sizeof(base));
或能有間隙?
是的,內存將是連續的。在配置方面,它與malloc
版本相同,但有幾處不同(調用構造函數,new
不返回NULL
,malloc
不會拋出異常等)。
請注意,您不能將new[]
與delete
或free
混淆,您必須使用delete[] objects
來釋放內存。
也許吧。 new
運算符執行兩件事:它調用operator new
函數,該函數將返回一個連續的內存塊,並對所有可能的類型進行適當的對齊(除非不是這樣;例如新的錯誤放置位置)。然後它調用該對象的構造函數,它可以做任何事情。包括分配額外的塊,這些塊不會與第一塊連續。
如果new
運算符未超載,則分配的內存塊是連續的。但是如果它超載,我們無法知道(一些邪惡的程序員可能已經超載了它:D)
這不完全相同。 'new []'版本將調用每個對象的默認構造函數。 –
@ edA-qamort-ora-y這就是我所說的...... –
對不起,我今天瞎了,我猜。然而,新版本會分配更多的空間來記住數組的大小,所以'delete []'可以調用正確數量的析構函數。這當然是空間上的微小差異。 –