從它的聲音來看,你根本不需要指針。實際上,因爲這是來自C庫中的工廠函數,所以它不是真正的「一流」C++指針。例如,你不能安全delete
它。
真正的問題(如果有的話)是在程序退出之前調用SDL_FreeSurface
。
這需要一個簡單的包裝類。
struct smart_sdl_surface {
SDL_Surface *handle;
explicit smart_sdl_surface(char const *name)
: handle(SDL_LoadBMP(name)) {}
~smart_sdl_surface()
{ SDL_FreeSurface(handle); }
};
class ball
{
private:
static smart_sdl_surface ball_image_wrapper;
static SDL_Surface *& ball_image; // reference to the ptr inside wrapper
};
smart_sdl_surface ball::ball_image_wrapper("ball.bmp");
SDL_Surface *&ball::ball_image = ball::ball_image_wrapper.handle;
當程序初始化時,調用構造函數並讀取文件。當程序退出時,析構函數被調用並且對象被銷燬。
刪除了我的答案,與您的答案類似,但沒有詳盡。 – Nate 2010-05-04 23:27:02
我的想法是像你在2中描述的那樣做,但我認爲可能有更好的方法。 什麼是智能指針?從來沒有聽說過。聽起來像垃圾回收.. – user299831 2010-05-04 23:34:53
智能指針是一個持有指針的對象,允許您像指針一樣使用它,並在指針被銷燬時釋放該指針的內存(通常通過引用計數來查看是否存在是指針留下的任何引用)。它與垃圾收集類似,它爲您管理內存,但它是一個單獨的概念。我添加了一個鏈接到boost實現。網上有大量的信息 - 包括維基百科。另外,如果你只是在SO搜索智能指針,你會得到一些與它們相關的問題。 – 2010-05-05 00:04:53