销毁ALLEGRO_BITMAP的矢量*

时间:2018-01-31 19:44:06

标签: c++ vector memory-leaks allegro allegro5

我使用库Allegro5。 在我的名为Animation的类中,我有vector<ALLEGRO_BITMAP*> sprites。 在构造函数中,我用一些位图填充它,在析构函数中我想正确删除它。但是,我的解决方案仍会导致内存泄漏:

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

for (auto it : sprites)
    delete it;

sprites.~vector();

或其他任何组合。

我真的无法找出为什么它没有正确删除。

编辑:

现在我有了这个并且仍然存在小的内存泄漏,但是大小小于1 MB

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

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();

1 个答案:

答案 0 :(得分:1)

不要sprites成为std::vector<ALLEGRO_BITMAP*>,将其设为std::vector<std::unique_ptr<ALLEGRO_BITMAP*,al_destroy_bitmap>>。这样,当调用sprites的析构函数时(或者当你将其调整为零时),unique_ptr析构函数将释放位图。