スプライトをロードしてキャッシュし、未使用のスプライトをキャッシュから削除する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
が、deleterにいるため、weak_ptrをロックすることもできません。弱いポインターと生のポインターの両方を維持する以外に、本当に他の選択肢はありませんか?