gpt4 book ai didi

c++ - 如何将智能指针与 Allegro 位图一起使用?

转载 作者:行者123 更新时间:2023-11-30 01:13:38 24 4
gpt4 key购买 nike

我已经厌倦了决定哪些类负责删除哪些位图。我试图重写我的代码以使用带有自定义删除器的智能指针 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'

解决我的问题的其他解决方案是创建一个 Bitmap 类来包装所有 Allegro 内容,但这看起来很丑陋,我认为我不应该这样做。另外,我已经在各处使用了其他 allegro 函数,然后我想为 ALLEGRO_SAMPLEALLEGRO_FONT 编写相同类型的类。我真的不想那样做。

如何将智能指针与 Allegro 位图一起使用?

编辑:也许为了让非 Allegro 编码人员了解 ALLEGRO_BITMAP 的工作原理,我将在下面发布一些代码

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返回指向完全构造的对象的指针,因此您不想调用任何构造函数(智能指针构造函数除外)。

关于c++ - 如何将智能指针与 Allegro 位图一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com