delete a,b;与delete a; delete b;的区别?

yitaohust 2010-08-12 09:14:13
无意中从下面的代码中发现对delete的认识还不深刻,请指教为什么写成一个delete 2个指针语句就没错,而写成2个delete语句,执行时就报错了;
这里pa和pb指向相同的地址,执行完delete pa;后,pa就成野指针了,那此时pb难道也成野指针了?
delete pa,pb;与
delete pa;
delete pb;在语法功能上,到底有何差别?

#include "stdafx.h"
#include "iostream.h"

class A
{
public:
void virtual f()
{
cout<<"A"<<endl;
}

};

class B:public A
{
public:
void virtual f()
{
cout<<"B"<<endl;
}
};

int main()
{
A *pa = new A();
pa->f();
B *pb = (B*)pa;
pb->f();

delete pa, pb; //OK
//delete pa;
//delete pb; //ERROR!
pa = new B();
pa->f();
pb = (B*)pa;
pb->f();

return 0;
}
...全文
642 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hastings 2010-08-12
  • 打赏
  • 举报
回复
这是逗号表达式~~~~~
delete pa, pb;
pb的时候啥也没做~~~~
yitaohust 2010-08-12
  • 打赏
  • 举报
回复
我以前上课时,还真没碰到delete a,b;这样的;
刚是在一本书上看到别人写这样的代码,我眼一瞟刚好扫到这行代码,还好奇怎么还可以这么用,就调试一下,结果出错了。
明白了,可以结贴了。
DotCpp 2010-08-12
  • 打赏
  • 举报
回复
delete a,b实际上只是delete a,b没有执行删除。你在哪本资料上看delete有这种用法的?
jackyjkchen 2010-08-12
  • 打赏
  • 举报
回复 1
delete不允许级联,delete a,b实际上只有delete a有效

delete pb出错是因为和pa是一个指针,不能delete两次

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧