可能是重复问题:
(POD)释放内存:delete和delete[]相同吗?
delete
是否会释放数组中第一个元素之后的元素?
char *s = new char[n];
delete s;
在上述情况下,由于所有
s
的元素都是连续分配的,并且不应该可能仅删除数组的一部分,因此这是否重要?对于更复杂的类型,
delete
会调用第一个对象之外的对象的析构函数吗?Object *p = new Object[n];
delete p;
如何使用delete[]
推断除第一个以外的Object
数量,这不意味着它必须知道分配内存区域的大小吗?如果内存区域由于性能原因留有一些余量怎么办?例如,人们可以假设并非所有分配器都提供单字节粒度。那么,任何特定的分配都可能超过每个元素所需的大小一个或多个元素。
对于像char
,int
这样的基本类型,是否有任何区别:
int *p = new int[n];
delete p;
delete[] p;
free p;
除了各自通过“delete”->“free”释放机制采取的路线外,还有什么其他路线可以进行调用?