为什么具有list <struct type =“”> :: iterator的struct不能通过clear()删除?

时间:2018-03-25 15:45:40

标签: c++

我是iOS开发人员,我不熟悉C ++。所以,我无法理解为什么用clear()方法无法删除imageMap的内容?

struct ImageNode
{
  string key;
  UIImage *image;(UIImage is a class in Objective-C)
};

struct ImagePointer
{
  list<ImageNode *>::iterator it;
  bool isLRUQueue;
};

list<ImageNode *> FIFOQueue;
list<ImageNode *> LRUQueue;
map<string, ImagePointer *> imageMap;

//clear method
- (void)clear
{
  //why need for loop???
  for (auto it = imageMap.begin(); it != imageMap.end(); it++)
  {
    delete *it->second->it;
    delete it->second;
  }
  FIFOQueue.clear();
  LRUQueue.clear();
  imageMap.clear();
}

1 个答案:

答案 0 :(得分:0)

  

我无法理解为什么不能通过clear()删除imageMap的内容

考虑到即使你在列表中存储指针,也不意味着当你从列表中删除指针时要删除它们:

std::list<int*> l;
int i;
l.push_back(&i);
l.clear; // if list deleted the pointer contained within the list
         // then bad things would happen

std::list无法读懂您的想法,无法知道您是否要删除指针。 必须在需要删除时删除指针。 Clear只会从列表中删除元素。