老生常谈,delete和delete[]的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:02:52
很多人说了new的用delete,new a[]的用delete[]。
现在要问的是new的用delete[]会不会有问题?
现在自己写了一个链表类,在释放函数中不可能知道使用链表的时候用new还是new a[]分配的,所以准备一律用delete[]来释放,不知道会不会有问题。
因为看到有人说new的不能用delete[],所以很疑惑,
希望回答出所以然,解释详细一些。

new和delete对应,new[]和delete[]对应,不能混用.我用的VC6,混用会导致程序崩溃.

链表明显是一个结点一个结点生成的,每个结点肯定都是new出来的,所以释放的时候也应该一个一个的delete

effective c++里面是这个说法, 具体为什么好像他也没说
这里面有些事情是标准规定的,比如 new 对应 delete , new[]对应 delete[]。 但如果不这么做会是什么结果,也就是说标准之外的情况下的操作结果,应该是实现定义的。 也许有些实现可以delete[]一个new出来的东西,不过既然标准没说这个可以,那么另一个实现出于某种原因把这个搞砸也是正常的了。
如果确实有可能有些东西是new出来的, 看看能不能改用 new[1] ?

如果是内建类型,char int long这种之类的
直接 delete就可以了

如果是自定义的类
必须是 delete []p;

这个要对应的。。