C++基础:删除指针数组。

neicole 2012-09-19 07:07:55
现在在删除以下类型的指针数组遇到问题。

假设有三个类:
class Duck;
class SuperDuck1: public Duck;
class SuperDuck2: public Duck;

代码问题如下:

int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};

// delete [] duck; // 出错啦,原因是? 我理解是delete[]会将一段连续的内存删除,所以对这种情况同存溢出。

for(int i = 0; i < 3; ++i){ // 这样删除就正常。
delete duck[i];
}



这种类型的指针数组,还有没有其它的删除方法呢?

...全文
2583 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-09-19
  • 打赏
  • 举报
回复
可以
Duck** duck  = new  (Duck*)[3];

duck[0] = new Duck();
duck[1] = new SuperDuck1();
duck[2] new SuperDuck2();

for(int i = 0; i < 3; ++i){//是先删除duck[i]吗
delete duck[i];
}

delete[] duck;


[Quote=引用 4 楼 的回复:]
这样是否可以,请大师指教


int** duck = new (int*) [3];
int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};

for(int i = 0; i < 3; ++i){//是先删除duck[i]吗
delete duck[i];
}
……
[/Quote]
mujiok2003 2012-09-19
  • 打赏
  • 举报
回复

Duck* duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};
//int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};

//duck本身不是在堆上分配的,不等delete
// delete [] duck;
for(int i = 0; i < 3; ++i){ // 这样删除就正常。
delete duck[i];
}


franzhong 2012-09-19
  • 打赏
  • 举报
回复
有new就有delete
你的duck不是new出来的
而是内包含的东西是new出来的,所以要delete
neicole 2012-09-19
  • 打赏
  • 举报
回复
谢谢大家,问题想通了~ 又忘了栈~ 看见11楼,发觉将duck申请为指针的指针MS更好~
大大啊 2012-09-19
  • 打赏
  • 举报
回复
是啊 new 出来的就用 delete
叁叁玖玖 2012-09-19
  • 打赏
  • 举报
回复
new 和 delete是要配对使用的,duck 并不是由new分配出来的堆上的空间,不需要delete
duck[i] 才是new出来的,分别delete就可以了
jiandingzhe 2012-09-19
  • 打赏
  • 举报
回复
你的duck[]是栈上或者全局区声明的,删个啥?
cao_julians 2012-09-19
  • 打赏
  • 举报
回复
两个层面,
1.指针数组的元素--duck[i]的对象都是一个一个new来的,那么就一个一个的delete
2.指针数组----不是new来的,不用delete

若是指向三个指针元素的指针是new来的,就再delete它
li89 2012-09-19
  • 打赏
  • 举报
回复
这样是否可以,请大师指教


int** duck = new (int*) [3];
int * duck[3] = {new Duck(), new SuperDuck1(), new SuperDuck2()};

for(int i = 0; i < 3; ++i){//是先删除duck[i]吗
delete duck[i];
}

delete [] duck;
白首卧松云 2012-09-19
  • 打赏
  • 举报
回复
a* tmp = new a[10];
delete[] tmp;
new 出来的数组可以这样销毁

楼主是栈变量不用delete。

baichi4141 2012-09-19
  • 打赏
  • 举报
回复 2
duck本身是数组,不是用new申请的空间,因此不能delete
duck内部存放着三个使用new申请的空间的指针,这三个指针可以delete

图灵狗 2012-09-19
  • 打赏
  • 举报
回复
删除完duck[i],再删除duck,没有其它的删除方法。

64,648

社区成员

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

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