免费注册 查看新帖 |

Chinaunix

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

map 内存释放 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-20 16:14 |只看该作者 |倒序浏览
方式一:
                map<string,TPFSession*>::iterator  itr=m_TpfOrganMap.find(CallID);
                if(itr != m_TpfOrganMap.end())
                {
                        TPFSession *ptr = itr->second;
                        if(ptr != NULL)
                                delete ptr;       
                        m_TpfOrganMap.erase(CallID);
                }


方式二:
               
                TPFSession *ptr= m_TpfOrganMap[CallID];
                if(ptr != NULL)
                        delete ptr;
                m_TpfOrganMap.erase(CallID);

第一个没问题吧,第二个呢,这样可以不?  如果不行为什么。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
2 [报告]
发表于 2011-01-21 00:01 |只看该作者
第一个还好
第二个如果m_TpfOrganMap里面没CallID这个key的话,他会insert(std::make_pair(CallID,TPFSession *()))进去,然后返回给你这个新插入进去的value的引用.

虽然ptr也是NULL,但是你蛋疼的插入了一遍,然后又删除了一下

有兴趣你可以自己转到map的实现去看看

论坛徽章:
0
3 [报告]
发表于 2011-01-21 00:18 |只看该作者
我觉得第二个有问题吧

指针默认初始化成什么应该是没规定的

论坛徽章:
0
4 [报告]
发表于 2011-01-21 10:00 |只看该作者
显然方法二是不行的

论坛徽章:
0
5 [报告]
发表于 2011-01-21 10:02 |只看该作者
2楼的解释很详细

论坛徽章:
0
6 [报告]
发表于 2011-01-21 14:09 |只看该作者
OK  谢了。 词汇很精彩。。。

论坛徽章:
0
7 [报告]
发表于 2011-01-21 14:11 |只看该作者
TPFSession *tpfOrgan=new TPFSession();
。。。。。
。。。。。
        m_TpfOrganMap[CallID1]=tpfOrgan;       


在插入时这样可以吧??

论坛徽章:
0
8 [报告]
发表于 2011-01-21 14:12 |只看该作者

论坛徽章:
0
9 [报告]
发表于 2011-01-21 14:39 |只看该作者
不要再顶了,没啥可讨论得了

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
10 [报告]
发表于 2011-01-21 20:16 |只看该作者
我觉得第二个有问题吧

指针默认初始化成什么应该是没规定的
皇家救星 发表于 2011-01-21 00:18

  1. typedef int* int_ptr;
  2. int_ptr ptr =  int_ptr();
  3. printf("%p",ptr);
复制代码
你可以自己打打看.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP