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

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

我有一个 SpriteManager 类,它为我加载和缓存 Sprite ,并从缓存中删除未使用的 Sprite 。无论如何,这就是我的想法,我有点卡住了。我有一个 map<string,weak_ptr<ALLEGRO_BITMAP>>我在其中存储 Sprite ,并使用 weak_ptr 生成 shared_ptr的。现在我正在尝试使用一个删除器,它也从 map 中删除位图,它看起来像这样(显然不起作用):

[&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;
            }
        }
}

位图就是我所说的 map 。我当然比不了(*it).secondbmp ,但我也无法锁定 weak_ptr,因为我在删除器中。除了保留弱指针和原始指针之外,我真的别无选择吗?

最佳答案

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

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

关于c++ - 将 weak_ptr 与原始指针进行比较不起作用,正在寻找替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739965/

相关文章:

c++ - 使用带有 std::array 作为参数的 std::make_shared 初始化 std::shared_ptr

c++ - 为什么编译器没有选择基于enable_if的特化

c++ - 我可以在 C++ 中创建强类型整数吗?

c++ - 智能指针和构造函数异常

c++ - 模板重载 ostream 运算符

c++ - 如何在 Visual C++ 中将浮点文字处理为 double 或 float ?

c++ - [Boost]::DI 从注入(inject)器创建唯一的 shared_ptr 对象

c++ - shared_ptr-如何忽略第一个引用?

c++ - Bazel- 问题导入头文件

c++ - 我需要向项目添加什么以包含库?