免费注册 查看新帖 |

Chinaunix

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

标准容器删除指针变量的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-29 10:52 |只看该作者 |倒序浏览
我有一个deque<A>类型的容器.里面存放的是指针变量.当销毁deque<A>类型的容器变量时,我得先手工删除里面的指针变量.以下方法是否正确?谢谢

emplate <class A>
void Queue<A>::cleara(int i)
{   
    A l_item;
    加锁
    for(int i=0; i<m_que.size(); i++)
    {
        l_item = m_que.pop_front();
        delete *l_item;
    }
    m_que.clear();        
    解锁      
}

论坛徽章:
0
2 [报告]
发表于 2007-06-29 11:46 |只看该作者
谢谢

论坛徽章:
0
3 [报告]
发表于 2007-06-29 11:49 |只看该作者
即使A是指针,也谈不上正确,
这里delete *l_item破坏了和谐。

论坛徽章:
0
4 [报告]
发表于 2007-06-29 13:05 |只看该作者
能不能说详细点?

论坛徽章:
0
5 [报告]
发表于 2007-06-29 13:17 |只看该作者
emplate <class A>
void Queue<A>::cleara(int i)
{   
    A l_item;
    加锁
    for(int i=0; i<m_que.size(); i++)
    {
        l_item = m_que.pop_front();
        delete *l_item;
    }
    m_que.clear();        


自己回忆一下如何通过指针删除对象,把它跟你这段代码比较一下。

论坛徽章:
0
6 [报告]
发表于 2007-06-29 20:45 |只看该作者
不如先实现一个可以复制的智能指针,或者用boost::shared_ptr,把这个智能指针作为deque的元素类型,这样就不用这么麻烦了

论坛徽章:
0
7 [报告]
发表于 2007-06-29 21:29 |只看该作者
原帖由 hwz_119 于 2007-6-29 10:52 发表
我有一个deque<A>类型的容器.里面存放的是指针变量.当销毁deque<A>类型的容器变量时,我得先手工删除里面的指针变量.以下方法是否正确?谢谢

emplate <class A>
void Queue<A>::cleara ...


代码有问题,pop_front 会使size 改变的,建议用iterator 遍历

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-06-30 00:00 |只看该作者

  1. l_item = *m_que.pop_front()
复制代码

如果是 l_item 指针.就应该 delete l_item;  not delete *l_item;
如果是 类变量..那你就错了..根本不用delete

[ 本帖最后由 cookis 于 2007-6-30 00:02 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-06-30 00:21 |只看该作者
deque<A> ? deque<A *> ?

论坛徽章:
0
10 [报告]
发表于 2007-06-30 00:26 |只看该作者
LZ用list的size作为循环结束的判断,有没有考虑过pop出来一个之后size发生了变化而i继续递增导致了一些问题呢?如前面的朋友所说,用iterator应该是比较合理的做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP