我已經爲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