2012-04-03 30 views
6

Tôi muốn biết làm thế nào tôi có thể kết nối SDL_Surface * với shared_ptr?
Tôi cần gọi số SDL_FreeSurface(SDL_Surface*) trước khi xóa SDL_Surface. Làm thế nào tôi có thể "sửa đổi quá trình xóa" trong shared_ptr?"Kết nối" SDL_Surface với shared_ptr

Trả lời

13

Chỉ cần vượt qua SDL_FreeSurface để các nhà xây dựng:

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

Chỉ cần chắc chắn bạn không làm điều này với con trỏ trả về bởi SDL_SetVideoMode hoặc SDL_GetVideoSurface.

+1

Tại sao bạn không nên làm điều này với những thứ này? (SDL_SetVideoMode, v.v ..) – user1511417

+3

@ user1511417: Theo [tài liệu] (http://www.libsdl.org/docs/html/sdlsetvideomode.html). * "Bề mặt được trả lại được giải phóng bởi SDL_Quit() và nt sẽ được giải phóng bởi người gọi." * –

Các vấn đề liên quan