delete的问题,狂简单!
程序中有这样代码:
int *a,*b;
bool *c;
a=new int[4];
b=new int[5];
c=new bool[6];
我的问题是释放的时候我可否写成这样:
delete[] a,b,c;
还是应该写成:
delete[] a,b;
delete[] c;
小弟才开始学c++,概念还不是很清,请各位指点,谢谢!
问题点数:20、回复次数:16Top
1 楼OpenHero(开勇)回复于 2006-03-01 21:07:39 得分 2
不能Top
2 楼zh2817()回复于 2006-03-01 21:09:56 得分 2
的确Top
3 楼king555(king)回复于 2006-03-01 21:16:13 得分 0
那应该怎么写?
如果这样写:
delete[] a,b,c;
是错的,那这条语句代表什么意思?实际做了什么操作。
为什么编译时候它是对的?
Top
4 楼cunsh(村少)回复于 2006-03-01 21:28:46 得分 0
逗号运算呀Top
5 楼noOnlyCode(不错,偶就是传说中高数上下册都考80多分的牛逼人物!)回复于 2006-03-01 21:52:41 得分 2
如果这样写:
delete[] a,b,c;
是错的,那这条语句代表什么意思?实际做了什么操作。
为什么编译时候它是对的?
--------------------------
delete[] a,b,c;
上句与:"delete []a;
b;
c;"
三句等价。所以编译不报错。(猜的,没运行。有点懒,赎罪!)
delete []a;
delete []b;
delete []c;
不就可以了吗?
Top
6 楼bm1408(向va_list学习~不用VC好多年~)回复于 2006-03-01 22:12:55 得分 2
抛开能与不能,从程序可读性以及简洁性,你不能那种做Top
7 楼king555(king)回复于 2006-03-01 22:15:51 得分 0
逗号运算?
还是不太明白。
有没有人说明白一点?
我一开始以为delete[] a,b,c; 类似声明,如int a,b,c;
那我要是程序里有10、20个的new[]操作,难道要一个个delete[]啊
这个也太烦了吧,
呵呵
请大侠赐教Top
8 楼csusuntao(孙涛)回复于 2006-03-01 22:49:57 得分 0
我个人认为完全是可以的!
delete[] 表示后面释放的都是数组吗!
当然可以!Top
9 楼lei001(太极)回复于 2006-03-02 00:20:30 得分 2
还是分开写好点,写出来的代码有可能别人也要看的Top
10 楼king555(king)回复于 2006-03-02 10:59:17 得分 0
有点奇怪的是,我用delete[] a,b,c;
用boundscheck,说是有内存泄漏,而一个一个写delete [] a;delete[] b;delete[] c;
就没有了.
难道真的不可以写成delete[] a,b,c;??????????
困惑啊,困惑,
有没有大侠遇到这个情况的??????Top
11 楼DiabloWalkOnTheEarth(我想到个绝妙的昵称,只是地方太小,写不下)回复于 2006-03-02 11:14:41 得分 2
理所当然不行。。。。Top
12 楼willingbupt(buptcsdn)回复于 2006-03-02 12:58:41 得分 2
我个人认为有点想
int *a,b,c;声明,b,c都不是指针。
Top
13 楼Muf(沐枫)回复于 2006-03-02 13:34:27 得分 2
delete[]a,b,c;
这一句仅对a进行delete。而b,c则不进行任何操作。
delete[]a,b,c; 实际上等同于delete[]a;
Top
14 楼js_gary(李祥)回复于 2006-03-02 13:41:00 得分 2
不能delete[]a,b,c;
應該分開寫,這樣寫正正如樓上所說等同于delete[]a;Top
15 楼s_hluo(笨笨熊)回复于 2006-03-02 13:43:26 得分 2
delete是一种操作, 并不是类型, 它不像声明int i,j,k;一样!
所以delete []a,b,c;实际上相当于delete []a; a ; bTop
16 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-02 13:50:50 得分 0
逗号表达式,对用逗号分开的表达式依次求值,整个表达式的值为其中最后一个表达式的值:
比如 x = (2, 3, 4) // 结果 x = 4
逗号优先级是很低的,所以 x = 2, 3, 4 等于 (x = 2), 3, 4 x 被赋值为 2, 整个语句返回 4 被丢弃。
同样 delete [] a, b, c 等价于 (delete [] a), b, c delete[] 操作并不会在 b,c 上执行。
Top




