我已经为allegro位图制作了一个C++包装器。我创建一个AguiBitmap为测试一个全局变量,再后来我说,快板已初始化当析构函数被调用时从0xfefefefe读取错误
bitmap = AguiBitmap("somepath");
后。
然而,当我关闭应用程序,它崩溃的位图的析构函数。如果我做al_destroy_bitmap(0);它很好,但是我的位图指针没有任何问题,因为我用它来渲染。
AguiBitmap::~AguiBitmap()
{
al_destroy_bitmap(nativeBitmapPtr);
}
AguiBitmap::AguiBitmap()
{
nativeBitmapPtr = 0;
width = 0;
height = 0;
}
AguiBitmap::AguiBitmap(char *filename)
{
if(!filename)
{
nativeBitmapPtr = 0;
return;
}
nativeBitmapPtr = al_load_bitmap(filename);
if(nativeBitmapPtr)
{
width = al_get_bitmap_width(nativeBitmapPtr);
height = al_get_bitmap_height(nativeBitmapPtr);
}
else
{
width = 0;
height = 0;
}
}
AguiBitmap::AguiBitmap(std::string filename)
{
AguiBitmap((char*)filename.c_str());
}
ALLEGRO_BITMAP* AguiBitmap::getBitmap() const
{
return nativeBitmapPtr;
}
int AguiBitmap::getWidth() const
{
return width;
}
int AguiBitmap::getHeight() const
{
return height;
}
感谢
我该如何制作复制构造函数? – jmasterx 2010-10-20 04:03:12
@Milo:[一本很好的C++入门书](http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)将解释正确的C++内存管理,对象生命周期和问题与实施拥有资源的容器有关。具体来说,我推荐阅读Herb Sutter的_Exceptional C++ _。项目8-19和35-41深入讨论了这个问题。 – 2010-10-20 04:05:51
该行调用复制赋值运算符,而不是复制构造函数。 – 2010-10-20 04:10:10