首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么有list<struct type>::iterator的结构不能通过clear()删除?

为什么有list<struct type>::iterator的结构不能通过clear()删除?
EN

Stack Overflow用户
提问于 2018-03-25 23:45:40
回答 1查看 45关注 0票数 0

我是一个iOS开发人员,我不熟悉C++.So,我不能理解为什么imageMap的内容不能通过clear()方法删除?

代码语言:javascript
运行
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-26 00:17:11

我不明白为什么clear()不能删除imageMap的内容

请考虑,即使您确实将指针存储在列表中,也不意味着当您从列表中删除这些指针时,您想要删除它们:

代码语言:javascript
运行
复制
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只会从列表中删除元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49477696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档