问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

delete 和 delete 的区别

发布网友 发布时间:2022-04-19 12:32

我来回答

4个回答

热心网友 时间:2022-04-23 20:46

当调用delete的时候,系统会自动调用已分配的对象的析构函数。当我们用new [] 分配的对象是基本数据类型时,用delete和delete [] 没有区别。但是,当分配的对象是自定义对象时,二者不能通用。一般来说使用new分配的对象,用delete来释放。用new[] 分配的内存用delete [] 来逐个释放。
delete与delete[]需要注意的地方
1:首先来说一个大家容易忽略的问题: 定义:int *p=new int;
这个大家一看就知道,在内存中分配了一个int类型的空间,没错。但是我想说的是,操作系统在堆在分配了一个int类型空间给p指向的空间,但是p本身的值是在栈上,我觉的明白这个很重要。比如,你需要处理一个海量数据,这个数据需要用二维数组来表示,你如果这样定义int *ptr[MaxNum],然后再循环为每个ptr[0~MaxNum-1]分配空间,这个时候容易隐含一个错误,我们知道内存中栈的大小大约就2M左右,而堆很大,几乎没有*,当你的MaxNum很大的时候,就会导致内存溢出,因为ptr这个值的本身是在栈上的,而栈的大小就2M左右,而你又有这么多个地址要存放,所以会出错。解决办法有二个:一:用一维数据代替二维数组;二:定义一个二维指针; 然后再动态分配。
2:delete与delete[]执行遇到的问题:
① int *p=new int[100]; int num[100]; p=num; delete []p;
大家能看出这段代码有什么问题吗?如果你还没看出,那么你对指针及内存的动态分配与释放还需要再学习。
错误是发生在delete []p,为什么呢?按理说用new[]申请,用delete[]释放,应该没有问题啊。但是错误发生的原因是因为delete[]p释放的是数组num[100]的空间,而我们申请的空间根本就没有释放,为什么会出现这种情况呢?因为此时的指针已指向了num数组的首地址,而num[100]的空间会由系统自动释放,而我们现在强行释放,所以会发生错误。
②int *p=new int[3]; *p=1;
p++;//p的指向改变了,指向了下一空间 *p=2; delete []p;
大家能发现这段代码有什么问题吗?
错误还是发生在delete[]p,c/c++规定,当删除一个指针时,这个指针应指向其首地址,而上面的代码中p值已经发生了变化,所以会发生错误,如何避免呢?可以备份一份;如 int * pbak=p;在释放的时候,用delete[]pbak即可。
③ int* p = new int[10]; int *pp=p; delete []p; delete []pp;
这段代码哪里又发生了错误呢?
我们要知道,p向操作系统申请了10个int类型的空间,而pp只是指向这个空间,操作系统并没有为其再分配10个int类型的空间,所以当你用delete[]p释放这个空间后,再用delete[]pp释放就会发生错误。其实不管用哪个释放,只要释放一次就行了。
④ int a=100; itn *p=&a; delete p;
看到了这里,如果你还不能看出这段代码的错误,那你前面的白看了,说明你还是没有真正懂得啊! 错误还是发生在delete p,什么原因?因为p并没有通过new获得内存空间,只是指向某个变量,而delete p是强行释放a的空间,肯定发生错误啦。

热心网友 时间:2022-04-23 22:04

C++中delete和delete[]的区别如下:在回收用new分配的单个对象的内存空间的时候用delete,回收用new[]分配的一组对象的内存空间的时候用delete[]。程序举例说明:#include;usingnamespacestd;classT{public:T(){cout

热心网友 时间:2022-04-23 23:38

C++中delete和delete[]的区别如下:
在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。

热心网友 时间:2022-04-24 01:30

不是一个词吗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? Delete翻译 delete与 delete []区别 delete语句是什么? delete语句怎么用 DELETE键的用法 键盘上的delete是什么意思 Delete是啥意思 DELETE是什么意思 delete键是什么意思? delete什么意思 弟弟三年级作页,要写读书卡,求大家帮下忙啊!!! 三年级读书卡有没有一本书的读书卡 英特尔 Pentium(奔腾)G2030 3.00GHz 双核,这款处理器怎么样?是什么档次的? 小学生读书卡片样本 小学三年级读书卡中的好词,好句,好段。 小学三年级读书卡怎样制作?(新课标人教版) 三年级读书卡要好词好句 三年级读书卡怎样制作 坚定的锡兵读书卡怎么做三年级 读书卡怎么写啊,三年级的,包括读后感,会给分的。 g2030处理器马来西亚制造到底是赛扬还是奔腾 g2030 这个cpu怎么样? 奔腾双核G2030这款CPU参数是什么? 视频号能看到浏览过的人吗? 请问怎么再看到视频号上浏览过的视频? 微信视频号怎么看浏览记录? Color是什么意思 color中文是什么意思? color是什么中文意思? color 是什么意思? Colour是什么意思? color和colour有什么区别 color什么意思 color用英语翻译是什么意思 colour和color是什么意思?如何翻译? color是什么意思? color这个英语单词什么意思? color 是什么意思???? colour 译中文什么意思? color是什么意思?前面是Miss