八百里加急 迭代器是否需要释放?

wanglovec 2013-11-09 02:36:12
std::list< UserRes* >::iterator pUserRes;

for( pUserRes =pReq->m_UserResList.begin();
pUserRes !=pReq->m_UserResList.end();pUserRes++ )
{
int a=(*pUserRes)->pszId;
}

问题 :这样用完后需要对 pUserRes 释放吗?
如 释放该考虑它为空吗?
...全文
652 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
MZstudio2012 2013-11-12
  • 打赏
  • 举报
回复
请问 能否理解为 : 智能指针,都是自己释放自己的,不需要手动释放? 对的,你可以这么理解!
qyxqyxqyx 2013-11-12
  • 打赏
  • 举报
回复
迭代器在某些容器中就是指针的typedef。有些是自己对指针的包装类,以提供++,advance等重载特性。 所以迭代器不会占资源,只是一个位置值而已,像一个整形数一样
SKATE11 2013-11-11
  • 打赏
  • 举报
回复
都封装好了 不用自己释放
漫步者、 2013-11-11
  • 打赏
  • 举报
回复
迭代器的,不用管。
rmaly 2013-11-11
  • 打赏
  • 举报
回复
不用释放,用就好了
luotuo44 2013-11-11
  • 打赏
  • 举报
回复
int i; i还需释放吗?当然是不需要释放。因为是局部变量,存放在栈空间的。
cjfdqchwhj 2013-11-11
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
不需要释放的!迭代器类似于指针,但是高于指针的!
请问 能否理解为 : 智能指针,都是自己释放自己的,不需要手动释放?
todd_leftcode 2013-11-10
  • 打赏
  • 举报
回复
当然,IIRC,std::list的迭代器实际上是(或者相当于)一个指针,对它的释放只要释放这个指针占用的内存就好了(在楼主的例子中,这个内存在栈上,会自动释放)
todd_leftcode 2013-11-10
  • 打赏
  • 举报
回复
你这个迭代器对象分明是一个栈上分配的局部变量,当作用域退出时,stack unwinding会析构它的,楼主不必操心
greex 2013-11-09
  • 打赏
  • 举报
回复
例中,只不需要释放。原因:局部变量出了做用域自动释放。
turing-complete 2013-11-09
  • 打赏
  • 举报
回复
引用 12 楼 dyw 的回复:
[quote=引用 11 楼 mougaidong 的回复:] [quote=引用 10 楼 dyw 的回复:] [quote=引用 6 楼 ri_aje 的回复:] 迭代器本身不需要,主楼 list 里面指针指向的资源倒是可能需要释放。
同意。可以先把UserRes*指针给shared_ptr管理,然后把shared_ptr对象放入容器里,释放问题就不用管了,都会自动释放的。[/quote] std::list<std::unique_ptr<>> 或者 boost::ptr_list<>[/quote] unique_ptr是独占式的,似乎不太适合放在容器里。 [/quote] 多数情况(如楼主贴出的场景)是可以的,而且应该用unique_ptr,毕竟我们不太喜欢去复制一个容器。
dyw 2013-11-09
  • 打赏
  • 举报
回复
引用 11 楼 mougaidong 的回复:
[quote=引用 10 楼 dyw 的回复:] [quote=引用 6 楼 ri_aje 的回复:] 迭代器本身不需要,主楼 list 里面指针指向的资源倒是可能需要释放。
同意。可以先把UserRes*指针给shared_ptr管理,然后把shared_ptr对象放入容器里,释放问题就不用管了,都会自动释放的。[/quote] std::list<std::unique_ptr<>> 或者 boost::ptr_list<>[/quote] unique_ptr是独占式的,似乎不太适合放在容器里。
turing-complete 2013-11-09
  • 打赏
  • 举报
回复
引用 10 楼 dyw 的回复:
[quote=引用 6 楼 ri_aje 的回复:] 迭代器本身不需要,主楼 list 里面指针指向的资源倒是可能需要释放。
同意。可以先把UserRes*指针给shared_ptr管理,然后把shared_ptr对象放入容器里,释放问题就不用管了,都会自动释放的。[/quote] std::list<std::unique_ptr<>> 或者 boost::ptr_list<>
dyw 2013-11-09
  • 打赏
  • 举报
回复
引用 6 楼 ri_aje 的回复:
迭代器本身不需要,主楼 list 里面指针指向的资源倒是可能需要释放。
同意。可以先把UserRes*指针给shared_ptr管理,然后把shared_ptr对象放入容器里,释放问题就不用管了,都会自动释放的。
N_Sev7 2013-11-09
  • 打赏
  • 举报
回复
引用 4 楼 max_min_ 的回复:
不需要释放的!迭代器类似于指针,但是高于指针的!
为什么说高于指针呢?对容器不熟悉,斑竹给点详解呗?!我一直理解的迭代器就是指针了...
「已注销」 2013-11-09
  • 打赏
  • 举报
回复
迭代器迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。不需要释放的[copy的]
ylwdi 2013-11-09
  • 打赏
  • 举报
回复
引用 5 楼 hgjyts65fg 的回复:
std::list< UserRes* >::iterator pUserRes; 这种值语义的对象,函数退出时都会释放的(RAII) 这种则不行 std::list< UserRes* >::iterator* pUserRes = new std::list< UserRes* >::iterator();
嗯,不错,道理是一样。一般来说只要不是动态分配的内存,不用你去管。
ri_aje 2013-11-09
  • 打赏
  • 举报
回复
迭代器本身不需要,主楼 list 里面指针指向的资源倒是可能需要释放。
hgjyts65fg 2013-11-09
  • 打赏
  • 举报
回复
std::list< UserRes* >::iterator pUserRes; 这种值语义的对象,函数退出时都会释放的(RAII) 这种则不行 std::list< UserRes* >::iterator* pUserRes = new std::list< UserRes* >::iterator();
max_min_ 2013-11-09
  • 打赏
  • 举报
回复
不需要释放的!迭代器类似于指针,但是高于指针的!
加载更多回复(3)

64,637

社区成员

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

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