是否delete
释放数组中第一个元素之外的元素?
char *s = new char[n];
delete s;
在上述情况下,看到 的所有元素s
都是连续分配的,不应该delete
只分配数组的一部分吗?
对于更复杂的类型,是否会delete
调用第一个之外的对象的析构函数?
Object *p = new Object[n];
delete p;
怎么能delete[]
推导出Object
第一个之外的 s 的数量,这不是说它必须知道分配的内存区域的大小吗?如果出于性能原因分配的内存区域有一些悬垂怎么办?例如,可以假设并非所有分配器都提供单个字节的粒度。那么任何特定的分配都可能超过每个元素所需的大小一个或更多的整个元素。
对于原始类型,例如char
, int
,两者之间有什么区别:
int *p = new int[n];
delete p;
delete[] p;
free p;
delete
除了通过->free
释放机制的各个调用所采用的路由吗?