如何使用使用智能指针与Allegro位图

How to use use smart pointers with Allegro Bitmaps?

本文关键字:Allegro 位图 指针 智能 何使用      更新时间:2023-10-16

我已经决定我厌倦了决定哪些类负责删除哪些位图。我试图重写我的代码,使用智能指针与自定义删除al_destroy_bitmap

我的代码很简单。

shared_ptr<ALLEGRO_BITMAP> test = make_shared<ALLEGRO_BITMAP>(al_load_bitmap("hello.png"), al_destroy_bitmap);

我得到了相当多的错误,我只是似乎无法解决。

error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt2' uses undefined struct 'ALLEGRO_BITMAP'
error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt0' uses undefined struct 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'

解决我的问题的其他解决方案是创建一个位图类来包装所有的Allegro的东西,但这看起来很丑,我不认为我应该这样做。加上我已经在各处使用了其他快板函数,然后我想为ALLEGRO_SAMPLEALLEGRO_FONT编写相同类型的类。我真的不想做那件事。

我如何使用智能指针与Allegro位图?

编辑:也许给非allegro编码人员ALLEGRO_BITMAPs是如何工作的感觉,我将在 下面发布一小段代码
ALLEGRO_BITMAP *test = al_load_bitmap("hello.png") // This works
ALLEGRO_BITMAP test1; // This fails with error C2079 undefined struct ALLEGRO_BITMAP. I expect this here.

像这样:

std::shared_ptr<ALLEGRO_BITMAP> test(al_load_bitmap("hello.png"), al_destroy_bitmap);

记住:make_sharedmake_unique调用new,你不希望在这里。

make_x<T> 构造类型为T的对象,将给定的参数传递给T的构造函数。但是al_load_bitmap返回一个指向完全构造对象的指针,所以你不想调用任何构造函数(除了智能指针构造函数)。