首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >销毁ALLEGRO_BITMAP*的载体

销毁ALLEGRO_BITMAP*的载体
EN

Stack Overflow用户
提问于 2018-02-01 03:44:06
回答 1查看 176关注 0票数 0

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

代码语言:javascript
复制
for each (ALLEGRO_BITMAP* it in sprites)
{
    al_destroy_bitmap(it);
}

for (auto it : sprites)
    delete it;

sprites.~vector();

或者它们的任何其他组合。

我真的找不到为什么它不能正确删除。

编辑:

现在我有了这个,仍然有一个小的内存泄漏,但大小不到1MB

代码语言:javascript
复制
class Deleter
{
public:
void operator()(ALLEGRO_BITMAP* ptrToBitmap)
    {
        cout << "deleted"<<'\n';
        al_destroy_bitmap(ptrToBitmap);
    }
};

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-01 04:24:22

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48550239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档