清空列表的内容

时间:2014-11-02 21:27:56

标签: c++

假设我有一个列表

std::list<foo*> lst;

如果我执行以下操作:

lst.clear

会调用列表中所有项目的析构函数吗?或者我是否必须为每个项目单独调用析构函数?如果不是什么是清空列表内容并调用指针的析构函数的最佳方法?以下是否有效或有更好的方法

 for(
     std::list<foo*>::iterator listMyClassIter = lst.begin();
     listMyClassIter != lst.end();
     listMyClassIter ++) {
     delete listMyClassIter;   }

 lst.clear(); //Now clear the content

2 个答案:

答案 0 :(得分:3)

你的列表是指针,指针没有析构函数。这意味着你必须明确删除容器中的指针。

编辑如编辑问题: -

如果您希望列表自动为您管理内存,那么您可以使用boost :: shared_ptr而不是存储原始指针。

您可以对原始指针执行以下任一操作: -

for (...) { delete *it; } m_list.clear ();

OR

for (...) { delete *it; m_ilist.erase (); }

答案 1 :(得分:1)

由于您使用指针作为元素,因此不会调用析构函数。