从它的声音来看,你根本不需要指针。实际上,因为这是来自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