【发布时间】:2012-03-01 14:16:35
【问题描述】:
以下代码不是将指针返回到它返回的 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();
【问题讨论】:
-
设计思路:为什么是
list而不是vector?还是map?为什么是原始指针? :) -
您确定
AudioResource*有效吗?也许迭代器是正确的,是错误的后备列表。 -
看起来还不错(nit:后增量可能会带来更差的性能)。如何初始化 m_resources?
-
您能说明
m_resources是如何填充的吗? -
一切正常。我会说其他一些代码从集合中删除了一个指针并且没有将其删除或将其设置为
nullptr。