繁体   English   中英

std :: list迭代器

[英]std::list iterator

以下代码而不是将指针返回到audioResource,而是返回了无效的其他内容,我已经通过调试器进行了检查,问题出在这一行

return *list_it;

这是我的功能:

AudioResource* AudioManager::getResource(const unsigned int ID)
{
    std::list<AudioResource*>::iterator list_it;
    for(list_it = m_resources.begin(); list_it!= m_resources.end(); list_it++)
    {
        if((*list_it)->getID()==ID)
            {
std::cout<<*(*list_it)->getFileName();
            return *list_it;
        }
    }
    return nullptr;
}

O,我试着把它作为(* list_it),但是我得到了相同的结果= s

如何填充...

Resource* AudioManager::addResource(const unsigned int ID, 
      const std::string fileName,  const unsigned int scope,
      const std::string type)
{
     AudioResource* temp;
     if(type == "AUDIO_TYPE_SAMPLE")
     {
          temp = new AudioResource(ID,fileName,scope,
                      RESOURCE_AUDIO,AUDIO_TYPE_SAMPLE);
          m_resources.push_back(temp);
     }
     else if(type == "AUDIO_TYPE_STREAM")
     {
          temp = new AudioResource(ID,fileName,scope,
                    RESOURCE_AUDIO,AUDIO_TYPE_STREAM);
          m_resources.push_back(temp);
     }

     return temp;
}

致电获取资源

cout<<AudioManager::getInstance()->getResource(IDnum)->getFileName();

如果type既不是两个值,则未初始化的指针将添加到m_resources

AudioResource* temp;
if(type == "AUDIO_TYPE_SAMPLE")
{
    temp = new AudioResource(ID,fileName,scope,RESOURCE_AUDIO,AUDIO_TYPE_SAMPLE);
}
else if(type == "AUDIO_TYPE_STREAM")
{
    temp = new AudioResource(ID,fileName,scope,RESOURCE_AUDIO,AUDIO_TYPE_STREAM);
}
m_resources.push_back(temp);

temp初始化为NULL并且仅在temp != NULL时才添加到m_resources

同样,该函数返回相同的未初始化指针。

如果ID不存在,则返回nullptr ,但是您永远不会在调用站点对其进行检查,如果ID不存在,这将为您提供空指针访问权限,这很可能会产生问题。

AudioManager::getInstance()->getResource(IDnum)->getFileName();

更改为

AudioResource* res = AudioManager::getInstance()->getResource(IDnum);
if(res)
  std::cout << res->getFileName();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM