容器中保存的是new出来的对象的指针,出现了内存泄漏,怎么处理

容器中保存的是new出来的对象的指针,出现了内存泄漏,怎么办?
问题是这样的,由于程序需求,以自定义的一个结构体为类型创建一个CList容器
struct Element
{
//......
}
typedef CList<Element* ,Element*> MyList;
然后定义一个MyList对象lst,通过调用另一个函数给lst填充内容,但是添加的内容都是new出来,使用lst后,如何释放内存?
代码大致如下:
C/C++ code

func_GetElements(MyList* pLst)
{
for(/*......*/)
{
    Element* pElmt=new Element;
    //      给pElmt中成员赋值.....
    lst->AddTail(pElmt);        
}
}
////////
func1()
{
    MyList lst;
    func_GetElements(&lst);

    //处理lst中的内容。。。。。
    
    //这时候如果函数直接返回,就会导致内存泄漏,该怎么办?
}



------解决方案--------------------
在程序结束退出之前;
POSITION ps= GetHeadPosition();
while(ps)
{
Element* pE = (Element*)lst->GetNext(ps);
delete pE;
}
------解决方案--------------------
探讨
问题是这样的,由于程序需求,以自定义的一个结构体为类型创建一个CList容器
struct Element
{
//......
}
typedef CList<Element* ,Element*> MyList;
然后定义一个MyList对象lst,通过调用另一个函数给lst填充内容,但是添加的内容都是new出来,使用lst后,如何释放内存?
代码大致如下:

C/C++ c……

------解决方案--------------------
new 出来的玩意,一定要在某个地方delete掉.
------解决方案--------------------
有好办法的. 弄一个智能指针保存你的new出来的指针
然后再存在表里.这样remove的时候.在适当的时候它自己能销毁.
至于智能指针.可以参考 boost的smart_ptr或者类似的第三方的或者你自己写的库.一搜一大堆.
------解决方案--------------------
另外也可以不new出来对象.直接往里面添加. 不要存放指针.直接存放实体.
------解决方案--------------------
建议做一个容器派生类。
每个元素都在此派生类中new,也在此派生类中delete。
一般情况下能保证安全。
我没用过list,但我使用vector,如果元素是指针,我都是用自制的专门模板类,封装1个vector。在这个模板类中new,然后将指针添加到vector中,删除元素的同时,实现delete。基本安全。没有发生过内存泄漏。
------解决方案--------------------
写个析构函数,析构时delete
------解决方案--------------------
删除链表是取出指针 delete