如果代码如下:
int *p=new int (20);
delete []p;
这样时正确的我可以理解,为什么在编译器里运行如下代码同样是正确的呢?
int *p=new int (20);
delete p;//同样正确,原因呢?
…………………………………………………………………………………………………………
9.3 10:11更新
看到下面大家的解答稍微有些认识了,假如有类people
people *p=new people(20)
这个作何解释呢?
people *p=new people[20]
这个是对象数组,数组的大小为20.
可能是你笔误,也可能是你理解有误:int 后面的圆括号或许应该是方括号?
上面的代码片段,对应 p1 应该使用 delete 释放,对应 p2 应该使用 delete[] 释放。
如果 new 和 delete 不对应,将会发生
未定义行为
。具体到你的环境,如果你确认两种情况都正常执行并且没有内存泄漏的话,可以进行如下解释:
但,这仍然是一种
未定义行为
,即不同的编译器实现有不同的处理方式,C++ 标准没有做出任何保证。
除了 @harttle 给出的链接,这个链接中的讨论同样值得参考:http://stackoverflow.com/questions/6953457/delete-and-delete-are-the-same-when-deleting-arrays