假设我有一个列表
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
答案 0 :(得分:3)
你的列表是指针,指针没有析构函数。这意味着你必须明确删除容器中的指针。
编辑如编辑问题: -
如果您希望列表自动为您管理内存,那么您可以使用boost :: shared_ptr而不是存储原始指针。
您可以对原始指针执行以下任一操作: -
for (...) { delete *it; } m_list.clear ();
OR
for (...) { delete *it; m_ilist.erase (); }
答案 1 :(得分:1)
由于您使用指针作为元素,因此不会调用析构函数。