免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4497 | 回复: 20
打印 上一主题 下一主题

队列为了退出,强行把自已清空,是不是多余的设计? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-08 10:24 |只看该作者 |倒序浏览


  1. template<class T>
  2. class TestQueue{
  3. public:
  4.         TestQueue(int max):max(max),head(0),tail(0){
  5.                 buf=(T**)calloc(max,max*sizeof(T*));
  6.                 assert(buf);
  7.         }

  8.         ~TestQueue(){   /*在析构函数中要把队列清空,然后再释放队列本身*/
  9.                 while(!isEmpty()){
  10.                         T* tmp=dequeue();
  11.                         assert(tmp);
  12.                         delete tmp;/*这里不确定用free还是delete?*/
  13.                 }/*这种写法是不是多余的?是不是队列中只要有数据,队列就不应该退出,而不是队列为了自已退出,强行把自已清空?*/
  14.                 free(buf);
  15.         }

  16. private:
  17.         T** buf;
  18.                  int max;
  19.                  .......
  20. };
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-05-08 10:37 |只看该作者
队列自身的空间和队列所存放元素的空间是两码事.

论坛徽章:
0
3 [报告]
发表于 2009-05-08 10:39 |只看该作者
析构。。。。释放资源,这是必须的

论坛徽章:
0
4 [报告]
发表于 2009-05-08 10:39 |只看该作者
free释放malloc分配的内存,delete释放new分配的内存

论坛徽章:
0
5 [报告]
发表于 2009-05-08 10:47 |只看该作者
原帖由 converse 于 2009-5-8 10:37 发表
队列自身的空间和队列所存放元素的空间是两码事.


我要问的是队列退出前,先要清空队列中的数据,因为设计队列时不可能知道将来插入队列的数据分配内存的方式,这些数据该怎么释放?

论坛徽章:
0
6 [报告]
发表于 2009-05-08 10:50 |只看该作者
我认为队列在析构的时候如果里面的数据并不是你关心的,你就强制清空这个队列

论坛徽章:
0
7 [报告]
发表于 2009-05-08 10:52 |只看该作者
根据谁申请谁释放的原则,如果对象是队列的使用者申请的,应该由队列的使用者去释放,而不是队列本身去释放。

论坛徽章:
0
8 [报告]
发表于 2009-05-08 10:54 |只看该作者
最好你把申请空间也封装进去。

论坛徽章:
0
9 [报告]
发表于 2009-05-08 10:56 |只看该作者

回复 #7 gz80 的帖子

有的时候如果队列在程序已经完成任务的时候还非空呢,比如广度优先搜索找到一个解就退出,那时候可能已经退出搜索了,这时候队列可以由析构函数来进行释放吧

论坛徽章:
0
10 [报告]
发表于 2009-05-08 10:56 |只看该作者
原帖由 daybreakcx 于 2009-5-8 10:50 发表
我认为队列在析构的时候如果里面的数据并不是你关心的,你就强制清空这个队列


问题在于,你是用delete,还是free,去清空队列里的数据?如果直接free队列本身,那就内存泄漏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP