2012-04-03 24 views
6

我想知道如何連接SDL_Surface *和shared_ptr?
在刪除SDL_Surface之前,我需要撥打SDL_FreeSurface(SDL_Surface*)。如何在shared_ptr中「修改刪除過程」?將SDL_Surface連接到shared_ptr

回答

13

只是傳遞SDL_FreeSurface的構造器:

std::shared_ptr<SDL_Surface> shared_surf(SDL_LoadBMP("foo.bmp"), SDL_FreeSurface); 

只要確保你不會與SDL_SetVideoModeSDL_GetVideoSurface返回的指針做到這一點。

+1

爲什麼你不應該這樣做呢? (SDL_SetVideoMode等)。 – user1511417 2013-05-21 11:35:45

+3

@ user1511417:根據[文檔](http://www.libsdl.org/docs/html/sdlsetvideomode.html)。 *「返回的表面被SDL_Quit()釋放,並且應該被調用者釋放。」* – 2013-05-21 20:43:22