简体   繁体   English

销毁ALLEGRO_BITMAP *的向量

[英]Destroying a vector of ALLEGRO_BITMAP*

I use library Allegro5. 我使用库Allegro5。 In my class named Animation I have vector<ALLEGRO_BITMAP*> sprites . 在名为Animation的类中,我有vector<ALLEGRO_BITMAP*> sprites In constructor, I populate it with some bitmaps and in destructor I would like to delete it properly. 在构造函数中,我用一些位图填充它,在析构函数中,我想适当地删除它。 However, my solutions still lead to memory leaking: 但是,我的解决方案仍然导致内存泄漏:

for each (ALLEGRO_BITMAP* it in sprites)
{
    al_destroy_bitmap(it);
}

for (auto it : sprites)
    delete it;

sprites.~vector();

or any other combination of those. 或其他任何组合。

I really can't find out why it isn't deleting properly. 我真的不知道为什么它没有正确删除。

EDIT: 编辑:

Now I have this and there is still a small memory leak, but in the size less then 1 MB 现在我有了这个,仍然有一个小的内存泄漏,但是大小小于1 MB

class Deleter
{
public:
void operator()(ALLEGRO_BITMAP* ptrToBitmap)
    {
        cout << "deleted"<<'\n';
        al_destroy_bitmap(ptrToBitmap);
    }
};

and

vector<unique_ptr<ALLEGRO_BITMAP, Deleter>> sprites;

for (int i = 0; i < 100; i++)
{
    ALLEGRO_BITMAP* temp = al_load_bitmap("Fireball1.png");
    unique_ptr<ALLEGRO_BITMAP, Deleter> uptr;
    uptr = unique_ptr<ALLEGRO_BITMAP, Deleter>(temp);

    sprites.push_back(move(uptr));
}

sprites.~vector();

Don't make sprites a std::vector<ALLEGRO_BITMAP*> , make it a std::vector<std::unique_ptr<ALLEGRO_BITMAP*,al_destroy_bitmap>> . 不要将spritesstd::vector<ALLEGRO_BITMAP*> ,将其设置为std::vector<std::unique_ptr<ALLEGRO_BITMAP*,al_destroy_bitmap>> That way, when the destructor of sprites is called (or when you resize it to zero), the unique_ptr destructor will free the bitmap. 这样,当调用sprites的析构函数(或将其大小调整为零)时,unique_ptr析构函数将释放位图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM