销毁 ALLEGRO_BITMAP* 的向量
Destroying a vector of ALLEGRO_BITMAP*
我使用库 Allegro5。
在我的 class 命名动画中,我有 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();
不要将 sprites
设为 std::vector<ALLEGRO_BITMAP*>
,将其设为 std::vector<std::unique_ptr<ALLEGRO_BITMAP*,al_destroy_bitmap>>
。这样,当调用 sprites
的析构函数时(或者当您将其调整为零时),unique_ptr 析构函数将释放位图。
我使用库 Allegro5。
在我的 class 命名动画中,我有 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();
不要将 sprites
设为 std::vector<ALLEGRO_BITMAP*>
,将其设为 std::vector<std::unique_ptr<ALLEGRO_BITMAP*,al_destroy_bitmap>>
。这样,当调用 sprites
的析构函数时(或者当您将其调整为零时),unique_ptr 析构函数将释放位图。