【发布时间】:2012-07-29 05:03:49
【问题描述】:
我有一个 SpriteManager 类,它为我加载和缓存精灵,并从缓存中删除未使用的精灵。无论如何,这就是我的想法,我有点卡住了。我有一个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,因为我在删除器中。除了保留弱指针和原始指针之外,我真的别无选择吗?
【问题讨论】:
-
应该没有必要自己删除原始指针。当引用计数变为零时,使用它的 shared_ptrs 将负责删除。当然,如果你需要一个特殊的删除器,应该在 share_ptr 构建期间提供。
-
当位图被删除时,我需要将位图从我的地图中删除,我想我已经表达得很清楚了。我正在提供一个特殊的删除器,问题在于它的定义。
标签: c++ c++11 shared-ptr resource-management weak-ptr