我有一个SpriteManager类,可以为我加载和缓存sprite,并从缓存中删除未使用的sprite。无论如何,这是个主意,我有点卡住了。我有一个map<string,weak_ptr<ALLEGRO_BITMAP>>
我存储精灵,并使用weak_ptr来产生shared_ptr
。现在我正在尝试使用也从地图中删除位图的删除器,它看起来像这样(显然不起作用):
[&bitmaps](ALLEGRO_BITMAP* bmp){
for(auto it = bitmaps.begin(); it!=bitmaps.end(); ++it) {
if((*it).second == bmp) {
bitmaps.erase(it);
al_destroy_bitmap(bmp);
break;
}
}
}
位图是我正在谈论的地图。当然我无法比较(*it).second
和bmp
,但我也无法锁定weak_ptr,因为我在删除器中。除了保持弱指针和原始指针外,我真的别无选择吗?
答案 0 :(得分:5)
将迭代器与&bitmaps
一起存储到删除器中地图中的weak_ptr。然后用它删除。
[&bitmaps, iter](ALLEGRO_BITMAP* bmp){
bitmaps.erase(iter);
al_destroy_bitmap(bmp);
}