4

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

4

1 に答える 1

5

イテレータを。と一緒にデリータのマップのweak_ptrに格納し&bitmapsます。その後、それと一緒に削除します。

[&bitmaps, iter](ALLEGRO_BITMAP* bmp){
    bitmaps.erase(iter);
    al_destroy_bitmap(bmp);
}
于 2012-07-31T12:25:58.707 に答える