将weak_ptr与原始指针进行比较不起作用,寻找替代方案

时间:2012-07-31 12:22:48

标签: c++ c++11 shared-ptr resource-management weak-ptr

我有一个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).secondbmp,但我也无法锁定weak_ptr,因为我在删除器中。除了保持弱指针和原始指针外,我真的别无选择吗?

1 个答案:

答案 0 :(得分:5)

将迭代器与&bitmaps一起存储到删除器中地图中的weak_ptr。然后用它删除。

[&bitmaps, iter](ALLEGRO_BITMAP* bmp){
    bitmaps.erase(iter);
    al_destroy_bitmap(bmp);
}