none
关于STL库std::list::clear()的问题 RRS feed

  • 问题

  • 如果list<中是对象指针>,那么在处理内存的时候需要

    list<elem*> le;
    list<elem*>::iterator li;
    
    for(li = le.begin(); li != le.end(); li++)
    {
    	elem *e = *li;	// 装的是对象指针则
    	delete e;
    }
    
    le.clear();
    cout<<le.empty()<<" "<<le.size()<<endl;

    我的问题是调用clear()后list中的所有节点内存真的释放掉了吗?

    那为什么有的人会在循环体里用le.erase(li);来释放?

    但是那样做的话会导致栈异常,因为le.erase(li)的时候迭代器li已经被清除出链表,这样一来li++就会出错

    我应该怎么做才是最完美的处理掉整条list的内存呢?


    C/C++ and Aragaki yui's big fan.
    • 已编辑 MomoGNU 2010年12月21日 16:31 更易读
    2010年12月21日 16:27

答案

全部回复

  • 释放内存是通过delete e;完成的

    你的代码没什么问题

    • 已标记为答案 MomoGNU 2010年12月22日 2:13
    2010年12月22日 1:45
  • 谢谢了,我因为是刚接触通用编程,对里面的实现不是很了解,直接看list的源码实现也看得很吃力,不过我想stl应该是值得信任的吧

    经过一段时间的学习,现在我很迷GP的思想


    C/C++ and Aragaki yui's big fan.
    2010年12月22日 2:04