delete 和 delete [] 的区别? 我在程序中new了一个对象数组,然后分别用标题中的两种方法删除。单步跟踪进去,却发现没什么不同。难道二者只是表述的不同,本质是一样的吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char *p;(1); p = new char('A');delete p(2) p = new char[3];delete [] p; 你只释放了一部分你不delete也不会有问题只不过内存越来越少 两者是不一样的。delete 说明后面删除的指针是个单一对象,而delete []说明后面删除的指针是一个对象数组,假如string *stringArray = new string[100];...delete stringArray那么,又stringArray所指的100个string对象中的99个未必能够被适当的删除,因为它们的destrcctors没有被调用。所以正确的做法是:如果你在调用new时使用了[],那么必须在delete时也使用[];如果你在调用new时没有使用[],那么也不应该在delete时使用[] 不对delete只是释放了整个内存,只调用第一个元素的析构函数delete [] 会对整个数组的每个元素都调用析构函数的,然后再释放整个内存记住new的时候 如果有[],delete 的时候也要有 []这个匹配关系要做好就可以了。 理论上讲,delete []比delete会多一个整形字段来记录对象数n,因而delete []会调用n次对象元素的析构函数.但实际上在vc6.0和c++Builder5.0中delete []和delete可能具有一样的功能.详见http://www.csdn.net/develop/Read_Article.asp?Id=12027但还是建议new和delete,new[]和delete[]配对使用!!!!!!!! 谢谢诸位高手。我把自定义类加上析构函数,用delete执行时立即报错,用delete[]则调用了n次析构,看来只有当存在析构函数时才有不同。 全文的展开与收缩 VC++6.0安装出现问题 提示内存不能read OpenGL中的编译问题 怎样将字符串显示到编辑框中 [请教 ]如何在windows资源管理器左边中添加一个系统文件夹(类似金山快盘的图标) 向局域网内的机器拷贝文件的系统函数。。 这个...推荐一本书,关于图像的 再次调用 createMutex 会怎样? 求助:Debug Assertion Failed! 如何利用SQL语言取得字段有相同的一些记录(UP有分) CWnd的滚动条的问题。 IE中招!!!
(1); p = new char('A');
delete p
(2) p = new char[3];
delete [] p;
你不delete也不会有问题
只不过内存越来越少
而delete []说明后面删除的指针是一个对象数组,假如
string *stringArray = new string[100];
...
delete stringArray
那么,又stringArray所指的100个string对象中的99个未必能够被适当的删除,因为它们的destrcctors没有被调用。所以正确的做法是:
如果你在调用new时使用了[],那么必须在delete时也使用[];
如果你在调用new时没有使用[],那么也不应该在delete时使用[]
delete [] 会对整个数组的每个元素都调用析构函数的,然后再释放整个内存记住new的时候 如果有[],delete 的时候也要有 []
这个匹配关系要做好就可以了。
但实际上在vc6.0和c++Builder5.0中delete []和delete可能具有一样的功能.详见
http://www.csdn.net/develop/Read_Article.asp?Id=12027
但还是建议new和delete,new[]和delete[]配对使用!!!!!!!!
我把自定义类加上析构函数,用delete执行时立即报错,用delete[]则调用了n次析构,看来只有当存在析构函数时才有不同。